我有一份清单说明
gather_facts: no
如何为给定长度生成列表组合?
例如,如果给定长度为3
然后我需要来自给定列表列表的3个列表元素场景的所有组合。
示例:
[[2, 4, 6], [2, 6, 10], [2, 12, 22], [4, 6, 8], [4, 8, 12], [6, 8, 10], [8, 10, 12], [8, 15, 22], [10, 11, 12]]
或
[2, 4, 6], [2, 6, 10], [2, 12, 22]
如果给定长度为2,那么它应该像
[2, 4, 6], [8, 10, 12], [10, 11, 12]
...
... and so forth
或
[2, 4, 6], [2, 6, 10]
我不希望列表中的元素排列,但我想要列表本身的排列。
答案 0 :(得分:1)
这里有两种选择。第一种是使用itertools.permutations
。这将为您提供每个排列(即:[1,2]
和[2,1]
不会相同)
import itertools
lists = [[2, 4, 6], [2, 6, 10], [2, 12, 22], [4, 6, 8], [4, 8, 12], [6, 8, 10], [8, 10, 12], [8, 15, 22], [10, 11, 12]]
n = 3
for perm in itertools.permutations(lists, n):
print(perm)
如果您想要完全唯一的分组,没有重复,请使用itertools.combinations
(即:[1,2]
和[2,1]
将相同)。
for comb in itertools.combinations(lists, n):
print(comb)