首页 > 解决方案 > 获取 N 项的所有组合

问题描述

我有一个项目清单:

[0,1,10,20,5,6,7]

有没有一种简单的pythonic方法来获取n个变量的所有分组?在这种情况下,具有不同顺序的相似组被认为是重复的。

3:
(0,1,10)
(0,1,20)
(0,2,5)
...

4:
(0,1,10,20)
(0,1,10,5)
(0,1,10,6)
...

标签: python-3.xpandas

解决方案


也许您正在从 itertools 的食谱中寻找“powerset”

from itertools import chain, combinations

def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))

l = [0,1,10,20,5,6,7]


list(powerset(l))

输出:

[(),
 (0,),
 (1,),
 (10,),
 (20,),
 (5,),
 (6,),
 (7,),
 (0, 1),
 (0, 10),
 (0, 20),
 (0, 5),
 (0, 6),
 (0, 7),
 (1, 10),
 (1, 20),
 (1, 5),
 (1, 6),
 (1, 7),
 (10, 20),
 (10, 5),
 (10, 6),
 (10, 7),
 (20, 5),
 (20, 6),
 (20, 7),
 (5, 6),
 (5, 7),
 (6, 7),
 (0, 1, 10),
 (0, 1, 20),
 (0, 1, 5),
 (0, 1, 6),
 (0, 1, 7),
 (0, 10, 20),
 (0, 10, 5),
 (0, 10, 6),
 (0, 10, 7),
 (0, 20, 5),
 (0, 20, 6),
 (0, 20, 7),
 (0, 5, 6),
 (0, 5, 7),
 (0, 6, 7),
 (1, 10, 20),
 (1, 10, 5),
 (1, 10, 6),
 (1, 10, 7),
 (1, 20, 5),
 (1, 20, 6),
 (1, 20, 7),
 (1, 5, 6),
 (1, 5, 7),
 (1, 6, 7),
 (10, 20, 5),
 (10, 20, 6),
 (10, 20, 7),
 (10, 5, 6),
 (10, 5, 7),
 (10, 6, 7),
 (20, 5, 6),
 (20, 5, 7),
 (20, 6, 7),
 (5, 6, 7),
 (0, 1, 10, 20),
 (0, 1, 10, 5),
 (0, 1, 10, 6),
 (0, 1, 10, 7),
 (0, 1, 20, 5),
 (0, 1, 20, 6),
 (0, 1, 20, 7),
 (0, 1, 5, 6),
 (0, 1, 5, 7),
 (0, 1, 6, 7),
 (0, 10, 20, 5),
 (0, 10, 20, 6),
 (0, 10, 20, 7),
 (0, 10, 5, 6),
 (0, 10, 5, 7),
 (0, 10, 6, 7),
 (0, 20, 5, 6),
 (0, 20, 5, 7),
 (0, 20, 6, 7),
 (0, 5, 6, 7),
 (1, 10, 20, 5),
 (1, 10, 20, 6),
 (1, 10, 20, 7),
 (1, 10, 5, 6),
 (1, 10, 5, 7),
 (1, 10, 6, 7),
 (1, 20, 5, 6),
 (1, 20, 5, 7),
 (1, 20, 6, 7),
 (1, 5, 6, 7),
 (10, 20, 5, 6),
 (10, 20, 5, 7),
 (10, 20, 6, 7),
 (10, 5, 6, 7),
 (20, 5, 6, 7),
 (0, 1, 10, 20, 5),
 (0, 1, 10, 20, 6),
 (0, 1, 10, 20, 7),
 (0, 1, 10, 5, 6),
 (0, 1, 10, 5, 7),
 (0, 1, 10, 6, 7),
 (0, 1, 20, 5, 6),
 (0, 1, 20, 5, 7),
 (0, 1, 20, 6, 7),
 (0, 1, 5, 6, 7),
 (0, 10, 20, 5, 6),
 (0, 10, 20, 5, 7),
 (0, 10, 20, 6, 7),
 (0, 10, 5, 6, 7),
 (0, 20, 5, 6, 7),
 (1, 10, 20, 5, 6),
 (1, 10, 20, 5, 7),
 (1, 10, 20, 6, 7),
 (1, 10, 5, 6, 7),
 (1, 20, 5, 6, 7),
 (10, 20, 5, 6, 7),
 (0, 1, 10, 20, 5, 6),
 (0, 1, 10, 20, 5, 7),
 (0, 1, 10, 20, 6, 7),
 (0, 1, 10, 5, 6, 7),
 (0, 1, 20, 5, 6, 7),
 (0, 10, 20, 5, 6, 7),
 (1, 10, 20, 5, 6, 7),
 (0, 1, 10, 20, 5, 6, 7)]

推荐阅读