【问题标题】:Efficient iteration over a list representation of multidimensional indices (of arbitrary dimension)对多维索引(任意维度)的列表表示进行高效迭代
【发布时间】:2012-04-29 00:43:54
【问题描述】:

我使用任意维度的多维结构。我有一个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 模块,但没有任何反应。

【问题讨论】:

    标签: python algorithm recursion multidimensional-array tree


    【解决方案1】:
    >>> 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)
    

    【讨论】:

    • +1 用于迭代工具。有完全相同的方法,但发布太慢
    猜你喜欢
    • 2021-08-12
    • 2012-01-05
    • 1970-01-01
    • 2017-09-15
    • 2021-04-01
    • 2015-01-13
    • 2021-12-18
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多