是否有任何其他更快的方式來查找索引位置處的項目。python查找指定列表中的項目
items = ['aaa','sss','ddd','fff','gggg','hhhh']
indices = [1,3,4]
My way:
[items[i] for i in indices]
是否有任何其他更快的方式來查找索引位置處的項目。python查找指定列表中的項目
items = ['aaa','sss','ddd','fff','gggg','hhhh']
indices = [1,3,4]
My way:
[items[i] for i in indices]
如果你反覆使用同一指標,你可能會operator.itemgetter
做的更好:
getter = itemgetter(1,3,4)
desired = getter(items)
據我簡單的基準,itemgetter
約2.5倍更快(但我沒有」 t時間實際構造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'所需的時間,那麼[數據的差異最小](http://ideone.com/9p89Ym) – jfs
@JFSebastian - 很高興知道,感謝您的時間安排在那裏 - 雖然我的希望是,這是相同的物品,被重複檢索... – mgilson
謝謝。時間計算非常有幫助 – user1140126
它是你的應用程序的瓶頸嗎?典型的'items','indices'看起來像什麼? – jfs