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