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
, который позволяет индексировать по списку, или 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
работает не так, как срезы.