Python - cómo para bucle un array de no 0, sino xth elemento?
Tengo un for
lazo como este
ImgPaths = make_dataset(TestImgPath)
for i, ImgPath in enumerate(ImgPaths):
En que:
- TestImgPath es el camino para introducir imágenes. Tipo de String. En mi caso
TestImgPath = './TestData/TestWhole'
.TestData
yTestWhole
son carpetas. - ImgPath es el camino a la imagen. Por ejemplo
ImgPath = ./TestData/TestWhole\XXXXX.jpg
cuando imploro. XXXXX es de 00000 a 82700 en mi caso - ImgPath es el camino a las imágenes de inmediato. Por ejemplo
ImgPaths = ./TestData/TestWhole\\XXXXX.jpg
cuando imploro. Pero creo que es todo el 00000-XXXXX en uno, desdeImgPaths
se asigna como arriba.
Por lo tanto, hay 82700 archivos para manejar, y toma 24 segundos para un archivo. Espera que se haga completamente a la vez es demasiado largo. La carpeta padre es grande así que no puedo duplicar la carpeta padre en 10 copias y ejecutar cada copia. Así que dividiendo eso for
El bucle puede ser el camino a seguir. Parece que no es normal for
loop pero un array for
bucle.
Así que, cómo hacer un array for
¿Empieza el bucle y para en un determinado elemento? Si quiero empezar desde 11111.jpg y parar en 22222.jpg, ¿cómo hacerlo?
Este es el código fuente https://drive.google.com/file/d/1jnE7kSK2eyXEAsTXb_4IctUEbBkZSWJa/view?usp=sharing
Gracias.
Pregunta hecha hace 3 años, 5 meses, 6 días - Por quantumquasar
3 Respuestas:
-
Usted puede utilizar una declaración condicional para evitar el procesamiento hasta
i
alcanza el número de inicio deseado, y luegobreak
el bucle cuandoi
supera el número final:for i, ImgPath in enumerate(ImgPaths): if i > 22222: break elif i >= 11111: # process ImgPath
o uso
itertools.islice
para limitar las iteraciones al rango especificado:import itertools for ImgPath in itertools.islice(ImgPaths, 11111, 22222 + 1): # process ImgPath
Respondida el Dec 17, 2020 a las 04:11 - por devepicenter
Votos positivos: 0 | Votos negativos: 0 -
Para lograr lo que buscas, puedes modificar el
for
loop usando un rango de índices en lugar de iterar sobre todos los elementos del arrayImgPaths
. Aquí te muestro un ejemplo de cómo puedes hacerlo para empezar desde 11111.jpg y parar en 22222.jpg:python ImgPaths = make_dataset(TestImgPath) start_index = 11111 end_index = 22223
Se incluirá el 22222.jpg
for i in range(start_index, end_index): ImgPath = ImgPaths[i]Tu código para procesar la imagen aquí
En el código anterior, estamos generando un rango de índices desde
start_index
hastaend_index
, y luego accediendo a los elementos deImgPaths
con esos índices. Esto te permitirá ejecutar el bucle solo para los elementos que te interesan, en este caso, desde 11111.jpg hasta 22222.jpg.Espero que esta solución te sea de ayuda. ¡Déjame saber si tienes alguna otra pregunta!
Respondida el Dec 18, 2020 a las 04:10 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para iterar sobre un rango de elementos en una lista, puedes usar la sintaxis de rebanada en Python. La sintaxis de rebanada te permite seleccionar un subconjunto de elementos de una lista especificando el índice inicial y final.
En tu caso, puedes utilizar la siguiente sintaxis para iterar sobre los elementos de
ImgPaths
desde el índice 11111 hasta el índice 22222:python ImgPaths = make_dataset(TestImgPath) for i, ImgPath in enumerate(ImgPaths[11111:22223]):
Tu código aquí
Ten en cuenta que el índice final (
22223
) se especifica como exclusivo, por lo que el bucle se detendrá en el elemento 22222.También puedes utilizar la función
range()
para generar un rango de índices para iterar:python ImgPaths = make_dataset(TestImgPath) for i in range(11111, 22223): ImgPath = ImgPaths[i]
Tu código aquí
Espero que esto resuelva tu problema. Déjame saber si tienes alguna otra pregunta.
Respondida el Dec 18, 2020 a las 04:24 - por Gemini
Votos positivos: 0 | Votos negativos: 0