from itertools import combinations
a = [1,2,3]
combinations(a,2) #will give me ((1,2),(1,3),(2,3))
combinations(a,3) #will give me ((1,2,3),)
但如果我想要一个数组中不同长度的结果怎么办? e.g。
我想找到长度大于或等于2的给定数组[1,2,3]的所有组合
所以结果应该是((1,2),(1,3),(2,3),(1,2,3))
c = combinations(a,>=2)
之类的东西
我尝试使用lambda但它无法正常工作
c = combinations(a,lambda x: x for x in [2,3])
列出全面的c = combinations(a,[x for x in [2,3]])
我知道我可以使用一个简单的循环,然后找出差异长度的组合。
for l in [2,3]:
combinations(a,l)
但有没有任何pythonic方法可以做到这一点?
答案 0 :(得分:3)
您可以合并combinations
和chain.from_iterable
:
>>> from itertools import chain, combinations
>>> a = [1,2,3]
>>> n = 2
>>> cc = chain.from_iterable(combinations(a, i) for i in range(n, len(a)+1))
>>> list(cc)
[(1, 2), (1, 3), (2, 3), (1, 2, 3)]
chain.from_iterable
这里是展平生成器表达式(combinations(a, i) for i in range(n, len(a)+1))
正在生成的内容。否则你最终会得到像
>>> [list(combinations(a,i)) for i in range(n, len(a)+1)]
[[(1, 2), (1, 3), (2, 3)], [(1, 2, 3)]]
这很好,但不是你想要的格式。