list( myBigList[i] for i in [87, 342, 217, 998, 500] )
我用Python 2.5.2与以下答案进行了比较:
19.7微秒: [ myBigList[i] for i in [87, 342, 217, 998, 500] ]
20.6微秒: map(myBigList.__getitem__, (87, 342, 217, 998, 500))
22.7微秒: itemgetter(87, 342, 217, 998, 500)(myBigList)
24.6微秒: 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
不同于切片(slice),它的工作方式不同。