Python,按另一个列表排序列表

Python, sort a list by another list

本问题已经有最佳答案,请猛点这里访问。

我有一张单子a

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

以及一份清单b

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

我怎样才能得到我的清单c如下:

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

基本上,使用每个元素的一部分,按照a中定义的顺序对b进行排序。

非常感谢。


您可以使用sorted()key命名参数:

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


您可以尝试将lambda函数传递给sorted()内置函数的key参数:

1
2
3
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']


如果您有一个非常大的列表,那么使用.index的解决方案将不会非常有效,因为第一个列表对于第二个列表中的每个条目都是index。这需要O(n^2)时间。

相反,您可以构造一个排序映射:

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