Skip to main content
 首页 » 编程设计

python:从有序列表中排序键子列表的最快方法是什么

2025年05月04日15zhoujg

我对从一长串键中排序无序键子列表的速度有疑问。所以

keys =['a','c','b','f','e','d','p','t','s','y','h'] 
sub_list = ['y','b','a','p'] 

我有两个想法:

sublist = sorted(sub_list, key=keys) 

或者,

sublist = [key for key in keys if key in sub_list] 

据我所知,可能有比这两种更好的方法。有什么想法吗?

请您参考如下方法:

只是时间:

In [3]: %timeit sorted(sub_list, lambda a,b: cmp(keys.index(a), keys.index(b))) 
100000 loops, best of 3: 6.22 us per loop 
 
In [4]: %timeit sublist = [key for key in keys if key in sub_list] 
1000000 loops, best of 3: 1.91 us per loop 

编辑(更多方法):

%timeit sorted(sub_list, key=keys.index) 
100000 loops, best of 3: 2.8 us per loop 

此示例使用宏(或它们在 ipython 中的任何名称),但您可以通过以下方式自己使用 timeit:

import timeit 
 
p = """ 
keys =['a','c','b','f','e','d','p','t','s','y','h'] 
sub_list = ['y','b','a','p']""" 
 
s = "sorted(sub_list, lambda a,b: cmp(keys.index(a), keys.index(b)))" 
 
timeit.Timer(stmt=s, setup=p).timeit() 
>>> 8.40028386496742 
 
s = "[key for key in keys if key in sub_list]" 
timeit.Timer(stmt=s, setup=p).timeit() 
>>> 1.9661344551401498 

所以你可以尝试所有你能想到的方法,选择最快的