Python 将列表拆分为所有组合

Python 将列表拆分为所有组合,python,itertools,Python,Itertools,我知道有很多帖子都有类似的问题,我也看过很多帖子。然而,我不能做我需要的 我有一个列表L=[0,1,2,3,4,5],我想把它拆分成一对元组。例如: [(0,1,2),(3,4,5)] [(0,1,3),(2,4,5)] [(0,1,4),(2,4,5)] ... 在本例(共6个)中,每个元组需要包含原始列表中的一半元素。解决方案需要使用3个元素生成每个元组组合 我可以使用 list(itertools.combinations(L, 3)) [0,1,2,, 0, 1, 3, 0, 1,

我知道有很多帖子都有类似的问题,我也看过很多帖子。然而,我不能做我需要的

我有一个列表L=[0,1,2,3,4,5],我想把它拆分成一对元组。例如:

[(0,1,2),(3,4,5)]
[(0,1,3),(2,4,5)]
[(0,1,4),(2,4,5)]
...
在本例(共6个)中,每个元组需要包含原始列表中的一半元素。解决方案需要使用3个元素生成每个元组组合

我可以使用

list(itertools.combinations(L, 3))
[0,1,2,, 0, 1, 3, 0, 1, 4, 0, 1, 5, 0, 2, 3, 0, 2, 4, …]


itertools是否也为此提供了解决方案?

可能有更高性能的解决方案,可以避免对列表的另一半进行完全的额外迭代,但这应该可以忽略不计:

l = [[x, tuple(y for y in L if y not in x)] for x in combinations(L, 3)]
[[(0, 1, 2), (3, 4, 5)],
 [(0, 1, 3), (2, 4, 5)],
 [(0, 1, 4), (2, 3, 5)],
 [(0, 1, 5), (2, 3, 4)],
 [(0, 2, 3), (1, 4, 5)],
 [(0, 2, 4), (1, 3, 5)],
 [(0, 2, 5), (1, 3, 4)],
 [(0, 3, 4), (1, 2, 5)],
 [(0, 3, 5), (1, 2, 4)],
 [(0, 4, 5), (1, 2, 3)],
 [(1, 2, 3), (0, 4, 5)],
 [(1, 2, 4), (0, 3, 5)],
 [(1, 2, 5), (0, 3, 4)],
 [(1, 3, 4), (0, 2, 5)],
 [(1, 3, 5), (0, 2, 4)],
 [(1, 4, 5), (0, 2, 3)],
 [(2, 3, 4), (0, 1, 5)],
 [(2, 3, 5), (0, 1, 4)],
 [(2, 4, 5), (0, 1, 3)],
 [(3, 4, 5), (0, 1, 2)]]
这取决于原始列表中没有重复项。否则,您将不得不使用索引。以下修改使用相同的方法,但使用组合的列表索引,因此可以处理原始列表中的重复项:

indexes = ((x, (y for y in L if y not in x)) for x in combinations(range(len(L)), 3))
l = [[tuple(L[a] for a in A), tuple(L[b] for b in B)] for A, B in indexes]

这在某种程度上取决于是否所有列表项都是唯一的,以及您希望如何处理重复项。您可以尝试使用集合或创建原始列表的所有可能排列,并将每个排列一分为二。该列表中是否有重复的值?目前没有重复的值,但一般解决方案会很好,没有重复的答案,或者我的解决方案会很好,但有重复的。。好您将需要一种不同的方法。L=集[0,1,2,3,4,5];在itertools.combinationsL,3]中为x打印[[x,tupleL.differencex]可能在开始时转换为set会节省大量的set转换。您可以使用setL-setx替换tuple中的所有内容,这会破坏顺序,但是,我相当肯定set转换会有一些严重的开销。