首页 > 解决方案 > 通过另一个排序的枚举列表重新排列元组列表

问题描述

我有一个元组列表: a = [(10, 11), (5, 5), (2, 3), (6, 7), (8, 3), (9, 2)]和一个带有 values 的简单列表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, (2, 3)), (3, (6, 7)), (4, (8, 3)), (5, (9, 2))].

我怎样才能达到预期的效果?也许我需要使用某种索引,因为对压缩列表进行排序没有帮助。

谢谢。

标签: pythonlist

解决方案


如果目的是按照a的倒序排序b,则不需要对b枚举的序列进行枚举和排序,一开始就构建了 的中间列表b_sorted

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

[t for _, t in sorted(zip(b, a), reverse=True)]

这将返回:

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

推荐阅读