python - 通过另一个排序的枚举列表重新排列元组列表
问题描述
我有一个元组列表:
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))]
.
我怎样才能达到预期的效果?也许我需要使用某种索引,因为对压缩列表进行排序没有帮助。
谢谢。
解决方案
如果目的是按照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)]
推荐阅读
- angular - 何时调用 ag-grid OnGRIDReady?
- node.js - 一个查询中的多个查找条件不起作用
- java - How to upload byte array using apache common vfs
- ios - 下一个文本字段开始编辑时视图返回中心
- rgraph - 如何重绘 RGraph SVG 线图?
- django - 将 user.id 传递给 Django 表单工具中的 FormWizardView 类
- sublimetext - 列出 Sublime 的“在文件中查找”正在搜索的文件
- html - 在 SVG 路径上添加效果
- gcc - GCC with -masm=intel produces AT&T syntax
- r - Glue and For to many models with Automl - R