我正在尝试制作列表的所有可能组合。 喜欢:
l= [1,4,6,8,11,13]
combL = [ [1],[4],[6],[8],[11],[13],[1,4], .. ]
我尝试使用
itertools.combinations(l, len(l))
但它没有成功。 Python上的任何功能都可以做到这一点?
答案 0 :(得分:4)
from itertools import combinations
def get_all_combinations(input_list):
for i in xrange(len(input_list)):
for item in combinations(input_list, r = i + 1):
yield list(item)
input_list = [1,4,6,8,11,13]
for item in get_all_combinations(input_list):
print item
我们已经创建了一个生成器,所以它很有效,因为我们不必将整个组合存储在内存中。这对于组合生成器很重要,因为组合的数量通常非常大。
但是如果你想把所有的组合作为列表,那么你可以做
list(get_all_combinations(input_list))
# [[1], [4], [6], [8], [11], [13], [1, 4], [1, 6], [1, 8], [1, 11], [1, 13],..]
答案 1 :(得分:1)
作为清单:
[i for j in xrange(len(l)) for i in itertools.combinations(l, j+1)]
或作为发电机:
(i for j in xrange(len(l)) for i in itertools.combinations(l, j+1))
答案 2 :(得分:0)
res = []
for L in range(0, len(l)+1):
for subset in itertools.combinations(l, L):
res.append(list(subset))
输出:
[[], [1], [4], [6], [8], [11], [13], [1, 4], [1, 6], [1, 8], [1, 11], [1, 13], [4, 6], [4, 8], [4, 11],....