理想情况下,输入是[1,2],输出是所有组合[[1,1]、[2,2]、[1,2]、[2,1]]。基本上,打印所有可能的替换组合。你知道吗
def cart(lst):
if lst == []:
return [[]]
return [x[i:] + [lst[0]] + x[:i] for x in cart(lst[1:]) for i in range(len(x)) ]
l = [1,2,3]
print cart(l)
退货
[]
在更易于阅读的形式中,代码基本上是这样说的:
for x in cart(lst[1:]):
for i in range(len(x)):
return x[i:] + [lst[0]] + x[:i]
如果我们假设输入为[1,2,3]
的递归情况,那么
cart([2,3])
应该产生[[2,3], [3,2], [2,2], [3,3]]
,因此对于递归步骤,我们希望在每个可能的位置插入1
。(此代码可能缺少111
大小写。)
代码看起来逻辑正确,但输出一个空字符串。你知道吗
是否有遗漏或我处理问题的方法有误?你知道吗
编辑
实际上,我意识到代码会稍微复杂一些:
def cart(lst):
if len(lst) <= 1:
return lst
else:
return [x[i:] + [lst[j]] + x[:i] for x in cart(lst[1:]) for j in range(len(lst)) for i in range(len(x))]
尽管这仍然奇怪地返回一个空列表。我的预感是我错过了一个基本案件。你知道吗
编辑
这和我的基本案子有关。修订代码:
def cart(lst):
if len(lst) <= 1:
return [lst]
else:
return [x[i:] + [lst[j]] + x[:i] for x in cart(lst[1:]) for j in range(len(lst)) for i in range(len(x))]
l = [1,2,3]
print cart(l)
但现在又回来了
[[3, 2, 1], [2, 1, 3], [3, 2, 2], [2, 2, 3], [3, 2, 3], [2, 3, 3], [3, 3, 1 ], [3, 1, 3], [3, 3, 2], [3, 2, 3], [3, 3, 3], [3, 3, 3]]
现在更好了,尽管输出缺少集合。似乎又是一个基本问题。你知道吗
在这里找到了答案 Algorithm for recursive function for permutations with replacement in python
似乎我是想用列表本身的递归情况,而不是组合的大小。你知道吗
我想知道这个解决方案是否可以通过在列表上循环而不是组合的大小来实现。你知道吗
相关问题 更多 >
编程相关推荐