2

我知道我可以用 itertools 做到这一点,但我实际上正在尝试学习如何开始使用递归。

我想取这个列表中的两个值......

[0, 1]

...并创建一个包含其排列的列表列表:

[ [0, 0], [0, 1], [1, 0], [1, 1] ]

我可以通过理解和循环来做到这一点:

[ [i, j] for i in range(0, 2) for j in range(0, 2) ]

但这并不能很好地扩展。

因此,如果有人可以帮助我理解如何使用可以扩展到原始列表中任意数量的值的递归函数来做到这一点,我将不胜感激。

4

1 回答 1

4
def cartesian_product(base, n=0):
        if (n ==  len(base)-1):
                return [[i] for i in base]
        res = []
        for i in base:
                for element in cartesian_product(base, n+1):
                        res.append([i]+element)
        return res

*输入:* cartesian_product([1,2])

*输出:* [[1, 1], [1, 2], [2, 1], [2, 2]]

不是最好的方法,但它是递归的。每个元素由一个基本元素(示例中的 1 或 2)+ 一个先前大小的元素(如 [1] 或 [2])组成。

于 2013-07-24T12:42:36.363 回答