我有以下Python列表(也可以是元组):
myList = ['foo', 'bar', 'baz', 'quux']
我可以说
>>> myList[0:3] ['foo', 'bar', 'baz'] >>> myList[::2] ['foo', 'baz'] >>> myList[1::2] ['bar', 'quux']
如何明确挑选索引没有特定模式的项目?例如,我要选择[0,2,3]。或者,从1000个很大的清单中,我要选择[87, 342, 217, 998, 500]。是否有一些Python语法可以做到这一点?看起来像这样:
[0,2,3]
[87, 342, 217, 998, 500]
>>> myBigList[87, 342, 217, 998, 500]
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] ]
[ myBigList[i] for i in [87, 342, 217, 998, 500] ]
20.6 USEC: map(myBigList.__getitem__, (87, 342, 217, 998, 500))
map(myBigList.__getitem__, (87, 342, 217, 998, 500))
22.7 USEC: itemgetter(87, 342, 217, 998, 500)(myBigList)
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个相同。
另一种选择是以a开头,numpy.array它允许通过列表或a进行索引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不工作方式相同那些片。
tuple