Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python嵌套循环习语_Python_Loops_For Loop_Foreach_Idioms - Fatal编程技术网

Python嵌套循环习语

Python嵌套循环习语,python,loops,for-loop,foreach,idioms,Python,Loops,For Loop,Foreach,Idioms,我经常发现自己在这样做: 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 ... ? : 如果你已经将numpy作为一个依赖项,那么你就可以做到这一点了 >>> for x,y,z in

我经常发现自己在这样做:

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 ... ? :

如果你已经将
numpy
作为一个依赖项,那么你就可以做到这一点了

>>> 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
您可以使用:

使用:

从文档中:

输入变量的笛卡尔积

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


这取决于循环中的内容。如果处理列表,您可以使用


有关更一般的情况,请参见关于itertools

嗯。。。显然,这与
itertools.product
的作用相同。应该看到那个人来了…:-)我喜欢这个解决方案!它确实很简洁,尽管它更像是一个
numpy
习语,而不是python习语。@Bakuriu——我的观点是,没有
numpy
python
只是一个闪亮的玩具。。。但我知道这不是每个人的观点:-),谢谢。我最终选择了另一条路线,因为我不能使用itertools,但是,在查看了itertools的文档之后,这正是我所需要的。值得注意的是,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
import itertools
for x, y, z in itertools.product(range(x_size), range(y_size), range(z_size)):
    pass # do something here