[英]Why does Python operator.itemgetter work given a comma separated list of numbers as indices, but not when the same list is packaged in a variable?
这是我所遇到的问题的演示。 我对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
如何解决这个问题,以便在程序启动时使用指定为参数的任意索引列表?
这不是关于itemgetter,而是关于函数调用语法。 这些是不同的东西:
operator.itemgetter(1, 3, 5)
operator.itemgetter((1, 3, 5))
第一个获得项目#1,项目#3和项目#5。 第二个获得项目#(1,3,5)。 (这可能对字典有意义,但不适用于列表。)
第二个是你使用itemgetter(columns)
。 那么,你怎么得到第一个?
operator.itemgetter(*columns)
而已。
有关详细信息,请参阅教程中的解压缩参数列表 。
您需要将单个参数传递给itemgetter
。 这里的columns
是一个元组(1, 3, 5)
您可以使用*
运算符在函数调用中解压缩它。 *
展开列表或元组,使其值作为单独的参数发送,而不是将整个元组作为一个参数传递。
例如: func(*(1, 2, 3))
== func(1, 2, 3)
所以你需要的是:
columns=1,3,5
print operator.itemgetter(*columns)(lista)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.