Met*_*rix 5 python arrays recursion functional-programming list
我有以下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))
Run Code Online (Sandbox Code Playgroud)
返回:
[[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]]
Run Code Online (Sandbox Code Playgroud)
这不是预期的答案.看起来python将列表l引入函数中.所以当我追加l [-1]时,它会附加原始列表的最后一个元素,而不是发送到递归方法的较小列表.有什么方法可以解决这个问题吗?
这可能可以使用元组解决,但我想知道是否有使用列表的解决方案.
def subs(l):
if l == []:
return [[]]
x = subs(l[1:])
return x + [[l[0]] + y for y in x]
Run Code Online (Sandbox Code Playgroud)
结果:
>>> print (subs([1, 2, 3]))
[[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)