我知道我可以用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) ]
但这并不能很好地扩展。
因此,如果有人可以帮助我理解如何使用递归函数来解决原始列表中任意数量的值,我会很感激。
答案 0 :(得分: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])。