我有3个元素的N个列表。我想找到它们之间不使用相同索引两次的所有组合。每个组合必须始终有3个项目。
示例:
list1 = [l11, l12, l13]
list2 = [l21, l22, l23]
list3 = [l31, l32, l33]
所有可能的组合:
combinaison1 = l11, l22, l33
combinaison2 = l11, l23, l32
combinaison3 = l12, l21,l33
combinaison4= l12, l23, l31
combinaison5=l13, l21, l32
combinaison6= l13, l22, l31
但我不想要:
BADcombinaison = l11,l21,l32
我怎么能在python中做到这一点?
答案 0 :(得分:1)
由于您只需要3个或更多列表中的最多3个项目,因此第一步是找到k-3列表列表的k-排列。即permutations(lists, 3)
。从那里你实际上也不必置换索引,因为你想要唯一的索引。 (注意:这允许可变数量的列表以及列表的可变长度,但所有输入和输出列表的长度相等)。
基本上不是尝试置换索引,而是索引只是(0,1,2),因为你没有指定重复的索引,并且列表是置换的。
from itertools import permutations
# number of lists may vary (>= length of lists)
list1 = ["l11", "l12", "l13"]
list2 = ["l21", "l22", "l23"]
list3 = ["l31", "l32", "l33"]
list4 = ["l41", "l42", "l43"]
lists = [list1, list2, list3, list4]
# lenths of lists must be the same and will be the size of outputs
size = len(lists[0])
for subset in permutations(lists, size):
print([sublist[item_i] for item_i, sublist in enumerate(subset)])