如何显式地从Python列表或元组中选择项?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (62)

我有以下Python列表(也可以是tuple):

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]
提问于
用户回答回答于
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] )

注意,在Python3中,第一项被更改为与第四项相同。

另一种选择是从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])
用户回答回答于
from operator import itemgetter
itemgetter(0,2,3)(myList)
('foo', 'baz', 'quux')

扫码关注云+社区

领取腾讯云代金券