我有一个列表a
:
a = ['c','d','b','a','e']
以及一个列表b
:
b = ['a001','b002','c003','d004','e005']
我应该如何让我的列表c
变成以下的样子:
c = ['c003','d004','b002','a001','e005']
基本上按照a
中定义的顺序,使用每个元素的一部分来对b
进行排序。
非常感谢。
我有一个列表a
:
a = ['c','d','b','a','e']
以及一个列表b
:
b = ['a001','b002','c003','d004','e005']
我应该如何让我的列表c
变成以下的样子:
c = ['c003','d004','b002','a001','e005']
基本上按照a
中定义的顺序,使用每个元素的一部分来对b
进行排序。
非常感谢。
.index
的解决方案将不会很有效,因为第一个列表将被每个第二个列表中的条目索引。这将花费O(n^2)时间。order = {v:i for i,v in enumerate(a)}
c = sorted(b, key=lambda x: order[x[0]])
key
被调用了多少次?是n
吗?是否有一个由key
结果组成的缓存? - njzk2key
只计算一次并存储。这与cmp
参数不同,后者在每次比较时都会计算一次。 - nneonneo您可以使用 sorted()
的 key
参数来实现:
c = sorted(b, key = lambda e: a.index(e[0]))
index
将在a
上执行_O(N)_搜索,导致_O(N² log N)_排序。 - Richardlambda
函数传递给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']
index
将在a
上执行_O(N)_搜索,导致_O(N² log N)_排序。 - Richard