我有以下 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 语法可以做到这一点?看起来像:
>>> myBigList[87, 342, 217, 998, 500]
原文由 Kit 发布,翻译遵循 CC BY-SA 4.0 许可协议
我将答案与 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
进行索引:tuple
与切片的工作方式不同。