我需要能够创建一个包含输入列表的所有可能组合的列表.
例如,列表[1,2,3]应该返回[1 [1,2] [1,3] 2 [2,3] 3 [1,2,3]]
该列表不必按任何特定顺序排列.在这个网站上我发现了许多使用itertools的函数,但是当我只需要一个列表时,它们就会返回对象.
解决方法:
只需使用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)
现在梳子保持这个值:
[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)
现在梳子保持这个值:
[[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]