Mai*_*tor 48 python iteration numpy range
在Python上,range(3)将返回[0,1,2].是否存在多维范围的等价物?
range((3,2)) # [(0,0),(0,1),(1,0),(1,1),(2,0),(2,1)]
Run Code Online (Sandbox Code Playgroud)
因此,例如,循环通过基于图块的游戏上的矩形区域的图块可以写为:
for x,y in range((3,2)):
Run Code Online (Sandbox Code Playgroud)
注意我不是要求实现.我想知道这是否是一个公认的模式,如果在Python或它的标准/公共库上有内置函数.
Joe*_*ton 63
在numpy,它是numpy.ndindex.另外看看numpy.ndenumerate.
例如
import numpy as np
for x, y in np.ndindex((3,2)):
print x, y
Run Code Online (Sandbox Code Playgroud)
这会产生:
0 0
0 1
1 0
1 1
2 0
2 1
Run Code Online (Sandbox Code Playgroud)
Li-*_*Yip 37
你可以使用itertools.product():
>>> import itertools
>>> for (i,j,k) in itertools.product(xrange(3),xrange(3),xrange(3)):
... print i,j,k
Run Code Online (Sandbox Code Playgroud)
多次重复的xrange()陈述可以这样表达,如果你想将它扩展到一个十维循环或类似的荒谬:
>>> for combination in itertools.product( xrange(3), repeat=10 ):
... print combination
Run Code Online (Sandbox Code Playgroud)
其中遍历10个变量,从不同的(0,0,0,0,0,0,0,0,0,0)到(2,2,2,2,2,2,2,2,2,2).
一般来说,这itertools是一个非常棒的模块.同样,regexp比"普通"字符串方法更具表现力,itertools是表达复杂循环的一种非常优雅的方式.您应该自己阅读itertools模块文档.它会让你的生活更有趣.
dhg*_*dhg 22
实际上有一个简单的语法.你只需要两个fors:
>>> [(x,y) for x in range(3) for y in range(2)]
[(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
Run Code Online (Sandbox Code Playgroud)
因此,这是两个列表的笛卡尔积:
import itertools
for element in itertools.product(range(3),range(2)):
print element
Run Code Online (Sandbox Code Playgroud)
给出这个输出:
(0, 0)
(0, 1)
(1, 0)
(1, 1)
(2, 0)
(2, 1)
Run Code Online (Sandbox Code Playgroud)