以下是我所遇到的问题的演示。我对Python很新,所以我很确定我忽略了一些非常明显的东西。
import operator
lista=["a","b","c","d","e","f"]
print operator.itemgetter(1,3,5)(lista)
>> ('b', 'd', 'f')
columns=1,3,5
print operator.itemgetter(columns)(lista)
>> TypeError: list indices must be integers, not tuple
如何解决此问题,以便在程序启动时使用指定为参数的任意索引列表?
答案 0 :(得分:17)
这不是关于itemgetter,而是关于函数调用语法。这些是不同的东西:
operator.itemgetter(1, 3, 5)
operator.itemgetter((1, 3, 5))
第一个获得项目#1,项目#3和项目#5。第二个获得项目#(1,3,5)。 (这可能对字典有意义,但对列表没有意义。)
第二个是您使用itemgetter(columns)
时获得的。那么,你怎么得到第一个?
operator.itemgetter(*columns)
就是这样。
有关详细信息,请参阅教程中的Unpacking Argument Lists。
答案 1 :(得分:3)
您需要将个别参数传递给itemgetter
。 columns
这里是一个元组(1, 3, 5)
您可以使用*
运算符在函数调用中解压缩它。 *
扩展了一个列表或元组,使其值作为单独的参数发送,而不是将整个元组作为一个参数传递。
例如:func(*(1, 2, 3))
== func(1, 2, 3)
所以你需要的是:
columns=1,3,5
print operator.itemgetter(*columns)(lista)