一个将工作推到CPython(参考解释器)的C层的替代方案:
from operator import itemgetter
temp = ['a','b','c','d']
index_needed=[0,2]
output_list = itemgetter(*index_needed)(temp)
该函数返回一个包含值的元组;如果需要返回一个列表,只需将其放在list构造函数中即可:
output_list = list(itemgetter(*index_needed)(temp))
请注意,这只适用于至少需要两个索引的情况;
itemgetter
是根据其初始化方式而变化的返回类型,当传递一个键来提取时,直接返回该值,当传递多个键时返回一个值的元组。
对于一次性使用来说,它也不是特别高效。更常见的用例是如果您有一个可迭代的序列(通常是
tuple
,但任何序列都可以),并且不关心它们。例如,对于一个输入为
list
的情况:
allvalues = [(1, 2, 3, 4),
(5, 6, 7, 8)]
如果你只想要索引1和3的值,你可以写一个循环,像这样:
for _, x, _, y in allvalues:
在编程中,你可以解包所有的值,但将那些你不关心的值发送给_
来表示缺乏兴趣,或者你可以使用itemgetter
和map
将它们剥离到你关心的部分再进行解包:
from future_builtins import map
for x, y in map(itemgetter(1, 3), allvalues):
itemgetter
基于的方法不在乎在
allvalues
的给定元素中是否有超过四个项目,而手动拆包始终需要确切地四个;哪种方法更好主要取决于您的使用情况。