【发布时间】:2020-10-29 16:21:20
【问题描述】:
是否有一种简单的算法(很可能是递归算法)可以找到列表和所有大小的所有组合(从大小为 1 的组合到列表大小长度的组合)?
例如:如果我有一个列表 = [1, 2, 3, 4],我应该得到的所有尺寸的组合是:
[1], [2], [3], [4], [1,2], [1,3], [1,4], [2,3], [2,4], [ 3,4], [1,2,3], [1,2,4], [1,3,4], [2,3,4], [1,2,3,4]。
所以我只知道我在网上找到的一种递归算法,它可以找到大小 n 的组合,但不是针对从 1 到列表长度的所有大小。组合中的顺序无关紧要。
这是我在网上找到的代码:
def n_length_combo(lst, n):
if n == 0:
return [[]]
l =[]
for i in range(0, len(lst)):
m = lst[i]
remLst = lst[i + 1:]
for p in n_length_combo(remLst, n-1):
l.append([m]+p)
return l
这仅适用于大小为 n 的组合。但我想找到从 1 到列表长度的所有尺寸的组合。
这里有什么想法吗?
【问题讨论】:
-
你看过
itertools模块吗? -
我正在尝试不使用任何迭代工具
标签: python recursion combinations