首页 > 解决方案 > 根据另一个列表对列表进行排序,长度不均匀

问题描述

假设我有两个列表,l1 和 l2:

l1 = [1,9,6,8,3]
l2 = [8,1]

列表 l2 将根据列表 l1 的顺序进行排序,所以在这种情况下:

l2_reordered = [1,8]

注意:列表 l2 将始终有 2 个具有不同值的项目。

我可以想到一种简单的循环方法来做到这一点,但这将是非常低效的。这样做的pythonic和有效的方法是什么?

标签: python

解决方案


这是一个快速的解决方案。首先建立一个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)))。


推荐阅读