2013-01-31 3 views

Répondre

7

Si vous utilisez les mêmes indices sur et plus, vous pourriez faire mieux avec operator.itemgetter:

getter = itemgetter(1,3,4) 
desired = getter(items) 

Selon mon simple, de référence, itemgetter est d'environ 2,5 fois plus rapide (mais je n » t temps combien de temps il faut pour construire réellement la fonction getter pour commencer).

>>> 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'] 
+0

Si vous incluez le temps qu'il faut pour créer le 'getter' alors [la différence est minime pour les données] (http://ideone.com/9p89Ym) – jfs

+0

@JFSebastian - Bon à savoir, merci de faire le timing là - bien que mon espoir était que c'était les mêmes articles qui ont été récupérés à plusieurs reprises ... – mgilson

+0

Merci. Le calcul du temps a été d'une grande aide – user1140126

Questions connexes