Python-获取列表的所有组合
我知道我可以使用itertools.permutation获得大小为r的所有置换。 但是,对于Python-获取列表的所有组合,python,list,combinations,permutation,itertools,Python,List,Combinations,Permutation,Itertools,我知道我可以使用itertools.permutation获得大小为r的所有置换。 但是,对于itertools.permutation([1,2,3,4],3)它将返回(1,2,3)以及(1,3,2) 我想过滤这些重复(即获得组合) 有没有一种简单的方法可以得到所有的排列(所有长度) 如何将itertools.permutation()结果转换为常规列表 您需要itertools.compositions()。要获得常规列表,只需使用list()factory函数 >>> f
itertools.permutation([1,2,3,4],3)
它将返回(1,2,3)
以及(1,3,2)
itertools.permutation()
结果转换为常规列表您需要
itertools.compositions()
。要获得常规列表,只需使用list()
factory函数
>>> from itertools import combinations
>>> list(combinations([1, 2, 3, 4], 3))
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
使用和一个简单的循环来获得所有大小的组合
组合
返回一个迭代器,因此您必须将它传递到list()
才能查看它的内容(或使用它)
听起来你实际上在寻找: 此示例还显示了如何将结果转换为常规列表,只需将其传递给内置的
list()
函数即可
>>> from itertools import combinations
>>> list(combinations([1, 2, 3, 4], 3))
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
要获得每种长度的组合,可以使用如下循环:
>>> data = [1, 2, 3, 4]
>>> for i in range(1, len(data)+1):
... print list(combinations(data, i))
...
[(1,), (2,), (3,), (4,)]
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
[(1, 2, 3, 4)]
或者,要获得嵌套列表的结果,可以使用列表理解:
>>> [list(combinations(data, i)) for i in range(1, len(data)+1)]
[[(1,), (2,), (3,), (4,)], [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)], [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)], [(1, 2, 3, 4)]]
对于平面列表而不是嵌套列表:
>>> [c for i in range(1, len(data)+1) for c in combinations(data, i)]
[(1,), (2,), (3,), (4,), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4), (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4), (1, 2, 3, 4)]
您正在寻找
组合
?
>>> [c for i in range(1, len(data)+1) for c in combinations(data, i)]
[(1,), (2,), (3,), (4,), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4), (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4), (1, 2, 3, 4)]