我有以下Python函数用于打印一个数字列表的所有子集:
这将返回:
def subs(l):
if len(l) == 1:
return [l]
res = []
for sub in subs(l[0:-1]):
res.append(sub)
res.append([l[-1]])
res.append(sub+[l[-1]])
return res
li = [2, 3, 5, 8]
print(subs(li))
这将返回:
[[2], [8], [2, 8], [5], [8], [5, 8], [2, 5], [8], [2, 5, 8], [3], [8], [3, 8], [5], [8], [5, 8], [3, 5], [8], [3, 5, 8], [2, 3], [8], [2, 3, 8], [5], [8], [5, 8], [2, 3, 5], [8], [2, 3, 5, 8]]
这不是预期的答案。看起来Python通过引用将列表l传递到函数中。因此,当我附加l [ -1 ]时,它会将原始列表的最后一个元素附加到其中,而不是发送到递归方法中的较小的列表。有没有办法解决这个问题?
使用元组可能可以解决这个问题,但我想知道是否有一种使用列表的解决方案。
[list(itertools.permutations(li[:x])) for x in range(len(li))]
这样的内容放在一维列表中吗? - Dica