我经常发现自己这样做:
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 ... ? :
答案 0 :(得分:39)
您可以使用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
答案 1 :(得分:8)
如果您已经将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
答案 2 :(得分:7)
import itertools
for x, y, z in itertools.product(range(x_size), range(y_size), range(z_size)):
pass # do something here
来自文档:
输入迭代的笛卡尔积。
相当于生成器表达式中的嵌套for循环 ...
答案 3 :(得分:0)
这取决于循环内部的内容。如果处理列表,您可以使用list comprehension
对于更一般的情况,请参阅itertools上的this post。