Ответ 1
Вы можете использовать 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
Я часто делаю это:
for x in range(x_size):
for y in range(y_size):
for z in range(z_size):
pass # do something here
Есть ли более короткий способ сделать это в Python? Я думаю о чем-то вроде
for x, z, y in ... ? :
Вы можете использовать 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
Если у вас уже есть numpy
зависимость, numpy.ndindex
сделает трюк...
>>> 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
Используйте itertools.product()
:
import itertools
for x, y, z in itertools.product(range(x_size), range(y_size), range(z_size)):
pass # do something here
Из документов:
Декартово произведение входных итераций.
Эквивалентен вложенным циклам в выражении генератора.
...
Это зависит от того, что находится внутри цикла. Если вы имеете дело со списками, вы можете использовать понимание списка
Для более общего случая см. Этот пост на itertools.