我需要能够创建一个包含输入列表的所有可能组合的列表。
例如,列表[1,2,3]
应该返回[1 [1,2] [1,3] 2 [2,3] 3 [1,2,3]]
列表不必按任何特定顺序排列。在这个站点上,我发现了许多使用itertools
的函数,但是当我只需要list
时,这些函数就会返回对象。
最佳答案
只需使用 itertools.combinations
即可。例如:
import itertools
lst = [1, 2, 3]
combs = []
for i in xrange(1, len(lst)+1):
combs.append(i)
els = [list(x) for x in itertools.combinations(lst, i)]
combs.append(els)
现在
combs
拥有以下值:[1, [[1], [2], [3]], 2, [[1, 2], [1, 3], [2, 3]], 3, [[1, 2, 3]]]
是的,它与您提供的示例输出略有不同,但是在该输出中,您并未列出所有可能的组合。
我在每种尺寸的实际列表之前列出了组合的大小,如果您需要的只是组合(没有大小,如示例输出中所示),然后尝试使用其他版本的代码:
import itertools
lst = [1, 2, 3]
combs = []
for i in xrange(1, len(lst)+1):
els = [list(x) for x in itertools.combinations(lst, i)]
combs.extend(els)
现在
combs
拥有以下值:[[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]