用另一个列表给Python列表排序

12 投票
3 回答
15558 浏览
提问于 2025-04-18 02:43

我有一个列表 a

a = ['c','d','b','a','e']

还有一个列表 b

b = ['a001','b002','c003','d004','e005']

我想得到一个列表 c,内容如下:

c = ['c003','d004','b002','a001','e005']

简单来说,就是根据 a 中定义的顺序,对 b 的部分元素进行排序。

非常感谢。

3 个回答

7

你可以使用 sorted() 函数中的一个叫做 key 的参数来实现这个功能:

c = sorted(b, key = lambda e: a.index(e[0]))
9

如果你有一个非常大的列表,使用 .index 的方法效率就不高了,因为对于第二个列表中的每一个元素,第一个列表都要进行一次 index 查找。这种做法的时间复杂度是 O(n^2),也就是说,处理速度会很慢。

相反,你可以创建一个排序映射:

order = {v:i for i,v in enumerate(a)}
c = sorted(b, key=lambda x: order[x[0]])
5

你可以试着把一个 lambda 函数传递给 sorted() 这个内置函数的 key 参数:

a = ['c', 'd', 'B', 'a', 'e']
b = ['a001', 'B002', 'c003', 'd004', 'e005']
c = sorted(b, key = lambda x: a.index(x[0])) # ['c003', 'd004', 'b002', 'a001', 'e005']

撰写回答