Python嵌套循环成语

cac*_*cti 23 python foreach loops for-loop idioms

我经常发现自己这样做:

for x in range(x_size):
    for y in range(y_size):
        for z in range(z_size):
            pass # do something here
Run Code Online (Sandbox Code Playgroud)

有没有更简洁的方法在Python中执行此操作?我正在考虑的事情

for x, z, y in ... ? :
Run Code Online (Sandbox Code Playgroud)

Bak*_*riu 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
Run Code Online (Sandbox Code Playgroud)


mgi*_*son 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
Run Code Online (Sandbox Code Playgroud)

  • @Bakuriu - 我认为`python`没有'numpy`只是一个闪亮的玩具...但我知道这不是每个人的观点:-). (7认同)

And*_*ark 7

用途itertools.product():

import itertools
for x, y, z in itertools.product(range(x_size), range(y_size), range(z_size)):
    pass # do something here
Run Code Online (Sandbox Code Playgroud)

来自文档:

输入迭代的笛卡儿乘积.

等效于生成器表达式中的嵌套for循环.
...