Python 按另一个排序枚举列表重新排列元组列表

Python 按另一个排序枚举列表重新排列元组列表,python,list,Python,List,我有一个元组列表: a=[(10,11)、(5,5)、(2,3)、(6,7)、(8,3)、(9,2)]和一个包含值的简单列表b=[10,9,10,2,8,3]。然后我列举第二个列表,并出于某些目的对其进行排序 b_enumerated = list(enumerate(b)) # [(0, 10), (1, 9), (2, 10), (3, 2), (4, 8), (5, 3)] b_sorted = sorted(b_enumerated, key=lambda x: x[1], revers

我有一个元组列表:
a=[(10,11)、(5,5)、(2,3)、(6,7)、(8,3)、(9,2)]
和一个包含值的简单列表
b=[10,9,10,2,8,3]
。然后我列举第二个列表,并出于某些目的对其进行排序

b_enumerated = list(enumerate(b))
# [(0, 10), (1, 9), (2, 10), (3, 2), (4, 8), (5, 3)]
b_sorted = sorted(b_enumerated, key=lambda x: x[1], reverse=True)
# [(0, 10), (2, 10), (1, 9), (4, 8), (5, 3), (3, 2)]
现在我想根据第二个排序列表重新排列我的第一个列表,所以我希望得到
[(10,11),(2,3),(5,5),(8,3),(9,2),(6,7)]
(原始列表的元组按照排序列表的索引顺序:0,2,1,4,5,3),其中,例如,我枚举的第一个列表是
[(0,(10,11)),(1,(5,5)),(2,3)),(3),(6,7)),(4,(8,3)),(5,(9,2))]

我如何才能达到预期的结果?也许我需要使用某种索引,因为对压缩列表排序没有帮助


谢谢。

快速回答

a_sorted =  [a[i[0]] for i in b_sorted]
简要说明

你基本上是想说“发送
a[0]
a\u排序的[0]
,发送
a[1]
a\u排序的[2]
…发送
a[i]
a\u排序的[b\u排序的[i][0]

这可以通过代码来完成

a_sorted =  [a[b_sorted[i][0]] for i in range(len(b_sorted))]
它工作得很好,但是可以通过迭代
b_sorted
来缩短和整理

a_sorted =  [a[i[0]] for i in b_sorted]

如果目的是以
b
的相反顺序对
a
进行排序,则首先不需要枚举
b
并对枚举序列进行排序来构建排序的
b\u
的中间列表

相反,您可以使用
a
压缩
b
进行排序,然后只输出结果元组序列中的第二项:

[t for _, t in sorted(zip(b, a), reverse=True)]
这将返回:

[(10, 11), (2, 3), (5, 5), (8, 3), (9, 2), (6, 7)]