python - 根据另一个列表对列表进行排序,长度不均匀
问题描述
假设我有两个列表,l1 和 l2:
l1 = [1,9,6,8,3]
l2 = [8,1]
列表 l2 将根据列表 l1 的顺序进行排序,所以在这种情况下:
l2_reordered = [1,8]
注意:列表 l2 将始终有 2 个具有不同值的项目。
我可以想到一种简单的循环方法来做到这一点,但这将是非常低效的。这样做的pythonic和有效的方法是什么?
解决方案
这是一个快速的解决方案。首先建立一个dict
映射值到索引:
d = {v:i for i, v in enumerate(l1)}
然后使用它来获取排序键:
r = sorted(l2, key=lambda v: d[v])
创建d
是 O(len(l1)),排序是 O(len(l2)*log(len(l2)))。
推荐阅读
- google-chrome-devtools - chrome 控制台 $0 给了我一个函数而不是选定的 HTML 元素
- c++ - 我在 AudioKit 中使用什么语言?
- c# - 尝试连接到 SQL Server 数据库时出现错误
- mysql - 如何优化对规范化数据库结构的查询?
- javascript - 无法读取未定义 IndexedDB 的属性“结果”
- sql - 如何在联接的聚合查询中聚合字段中的多行
- c# - 无法从三元组的总和计算毕达哥拉斯三元组的正确乘积
- php - 为什么我第一次登陆 Laravel URL 它会基于 Elastic Beanstalk 呈现 HTTP?
- artificial-intelligence - 机器翻译(可能的方法)
- c++ - 当函数参数为 uint8_t 时无法使用 hxcpp 编译