作者:66代码 | 来源:互联网 | 2023-05-19 15:17
1> jepio..:
正确的答案是您应该使用itertools.combinations
。但是,如果由于某种原因您不想这样做,并且想编写一个递归函数,则可以使用以下代码。它是对生成组合的erlang方法的一种改编,因此乍一看似乎有点奇怪:
def combinations(N, iterable):
if not N:
return [[]]
if not iterable:
return []
head = [iterable[0]]
tail = iterable[1:]
new_comb = [ head + list_ for list_ in combinations(N - 1, tail) ]
return new_comb + combinations(N, tail)
这是考虑大小组合的一种非常优雅的方式N
:您将可迭代(头)的第一个元素与N-1
其他可迭代(尾)的较小的()组合在一起。然后,您N
在尾部添加相同大小的尾部()组合。这就是您获得所有可能组合的方式。
如果需要所有长度的所有组合,则可以执行以下操作:
for n in range(1, len(iterable) + 1):
print(combinations(n, iterable))