list( myBigList[i] for i in [87, 342, 217, 998, 500] )
答えをpython 2.5.2と比較しました。
19.7 usec: [ myBigList[i] for i in [87, 342, 217, 998, 500] ]
20.6 usec: map(myBigList.__getitem__, (87, 342, 217, 998, 500))
22.7 usec: itemgetter(87, 342, 217, 998, 500)(myBigList)
24.6 usec: list( myBigList[i] for i in [87, 342, 217, 998, 500] )
Python 3では、1番目が4番目と同じに変更されていることに注意してください。
別のオプションはnumpy.array
、リストまたはaを介したインデックス付けを可能にするaから始めることnumpy.array
です。
>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
tuple
それらがスライスされているのと同じように動作しません。