I want to get all combination of a list in form of a list of list using combinations method of itertools
我试过这个
1 2 3 4 5 6 7 8 | import itertools a=[10, 1 ,2, 7, 6, 1, 5] b=[] for i in range(len(a)): for s in itertools.combinations(a,i): if s not in b: b.append(s) print(b) |
我正在以元组的形式获得所需的输出。我希望输出如下:
1 | [[10],[1],...[10,1],...[10,1,2]....] |
号
因此,我们可以例如
1 2 3 4 5 6 7 8 9 | from itertools import combinations a=[10, 1 ,2, 7, 6, 1, 5] b=[] for i in range(len(a)): for s in map(list, combinations(a,i)): if s not in b: b.append(s) print(b) |
不过,这仍然不是一个好主意。列表的成员资格检查,以线性时间运行。由于有一个指数级的组合,这意味着它将开始在o((n!)2)时间,n为元素数,通常非常慢。
一种更快的方法是同时使用存储元素的
1 2 3 4 5 6 7 8 9 10 11 12 | from itertools import combinations a=[10, 1 ,2, 7, 6, 1, 5] b=[] seen = set() for i in range(len(a)): for s in combinations(a,i): if s not in seen: seen.add(s) b.append(list(s)) print(b) |
号