Python按索引在列表中查找项目

3
有没有其他更快的方法来查找索引位置上的项目。
items = ['aaa','sss','ddd','fff','gggg','hhhh']
indices = [1,3,4]

My way: 
[items[i] for i in indices]

你的应用程序有瓶颈吗?典型的“items”、“indices”是什么样子的? - jfs
1个回答

8
如果您需要重复使用相同的索引,可以考虑使用 operator.itemgetter
getter = itemgetter(1,3,4)
desired = getter(items)

根据我的简单测试,itemgetter 大约快 2.5 倍(但我没有计算生成 getter 函数的实际时间花费)。
>>> items = ['aaa','sss','ddd','fff','gggg','hhhh']
>>> indices = [1,3,4]
>>> from operator import itemgetter
>>> import timeit
>>> getter = itemgetter(*indices)
>>> def list_comp(items=items,indices=indices):
...     return [items[i] for i in indices]
... 
>>> timeit.timeit('getter(items)','from __main__ import getter,items')
0.2926821708679199
>>> timeit.timeit('list_comp()','from __main__ import list_comp')
0.7736802101135254
>>> getter(items)
('sss', 'fff', 'gggg')
>>> list_comp()
['sss', 'fff', 'gggg']

如果您包括创建“getter”的时间,则数据的差异很小 - jfs
@J.F.Sebastian -- 很好知道,感谢您进行计时--尽管我希望重复检索的是相同的项目... - mgilson
谢谢。时间计算非常有帮助。 - user1140126

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接