我使用任意维度的多维结构。我有一个 xrange
迭代器的 Python 列表,每个迭代器代表一个多维数组的索引:
indices = [ i, j, k ]
在哪里
i = xrange(1,3)
j = xrange(3,5)
k = xrange(5,7)
为了生成所有可能的值,我使用了以下朴素的递归代码:
def travtree(index,depth):
"Recursion through index list"
if depth >= len(indices):
# Stopping Condition
print index
else:
# Recursion
currindexrange = indices[depth]
for currindex in xrange(len(currindexrange)):
newindex = list(index) # list copy
newindex.append(currindexrange[currindex])
travtree(newindex,depth+1)
travtree([],0)
这工作正常,但我想知道,是否有更有效的 Pythonic 方式来做到这一点?我尝试查看 itertools
模块,但没有发现任何问题。
最佳答案
>>> from itertools import product
>>> i = xrange(1,3)
>>> j = xrange(3,5)
>>> k = xrange(5,7)
>>> indices = [ i, j, k ]
>>> for item in product(*indices):
print item
(1, 3, 5)
(1, 3, 6)
(1, 4, 5)
(1, 4, 6)
(2, 3, 5)
(2, 3, 6)
(2, 4, 5)
(2, 4, 6)
关于python - 对多维索引(任意维度)的列表表示的高效迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195260/