首页 > 解决方案 > 两个单独列表的单独组合保持对应/相互依赖

问题描述

我有两个相同长度的列表,它们具有一对一的对应关系:

a = [1,2,3,4]
b = [6,7,8,9]

我想分别找到这两个列表的组合。但是两个列表的组合元素的索引必须相同。

例如,如果我这样做:

list(itertools.combinations(a,2))

我可能会得到

[(1,2),(1,3),(1,4),(3,2),(4,2),(4,3)]  

我本来可以

[(2,1),(3,1),(4,1),(2,3),(2,4),(3,4)]

也是因为两者都是一样的。

所以无论我得到什么组合,我都希望为第二个列表组合相同的索引。

因此,如果

list(itertools.combinations(a,2))

给我

[(1,2),(1,3),(1,4),(3,2),(4,2),(4,3)]

然后

list(itertools.combinations(b,2))

应该给我

[(6,7),(6,8),(6,9),(8,7),(9,7),(9,8)]

或者如果

list(itertools.combinations(a,2))

给我

[(2,1),(3,1),(4,1),(2,3),(2,4),(3,4)]

然后

list(itertools.combinations(b,2))

应该给我

[(7,6),(8,6),(9,6),(7,8),(7,9),(8,9)]

标签: pythonitertools

解决方案


您可以查看源代码以告诉您它是根据列表的索引而不是列表的值工作的。因此,虽然对于同一个列表,组合的输出总是相同的——颠倒列表的顺序显然会给你一个不同的组合输出。

为什么不在传递列表时对其进行排序,以便它们始终按数字递增顺序排列,从而解决问题。

a = [4,3,2,1]

list(combinations(a,2))
[(4, 3), (4, 2), (4, 1), (3, 2), (3, 1), (2, 1)]

list(combinations(sorted(a),2))
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

https://docs.python.org/3/library/itertools.html#itertools.combinations


推荐阅读