index - python if
Pitón anidado bucle Idiom (4)
A menudo me encuentro haciendo esto:
for x in range(x_size):
for y in range(y_size):
for z in range(z_size):
pass # do something here
¿Hay alguna forma más concisa de hacer esto en Python? Estoy pensando en algo parecido a
for x, z, y in ... ? :
Depende de lo que está dentro del ciclo. Si se trata de listas, es posible que pueda usar una lista de comprensión
Para el caso más general, consulte esta publicación en itertools.
Puede usar itertools.product :
>>> for x,y,z in itertools.product(range(2), range(2), range(3)):
... print x,y,z
...
0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
1 0 0
1 0 1
1 0 2
1 1 0
1 1 1
1 1 2
Si ya tienes numpy
como dependencia, numpy.ndindex
hará el truco ...
>>> for x,y,z in np.ndindex(2,2,2):
... print x,y,z
...
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Use itertools.product :
import itertools
for x, y, z in itertools.product(range(x_size), range(y_size), range(z_size)):
pass # do something here
De los documentos:
Producto cartesiano de los iterables de entrada.
Equivalente a los for-loops anidados en una expresión de generador.
...