5

这是我遇到的问题的演示。我对 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

如何解决此问题,以便可以在程序启动时使用指定为参数的任意索引列表?

4

2 回答 2

17

这不是关于 itemgetter,而是关于函数调用语法。这些是不同的东西:

operator.itemgetter(1, 3, 5)

operator.itemgetter((1, 3, 5))

第一个为您提供第 1 项、第 3 项和第 5 项。第二个给你项目#(1, 3, 5)。(这可能对字典有意义,但对列表没有意义。)

第二个是你使用时得到的itemgetter(columns)。那么,如何获得第一呢?

operator.itemgetter(*columns)

而已。

有关详细信息,请参阅教程中的解包参数列表

于 2013-07-17T22:40:46.803 回答
3

您需要将单个参数传递给itemgetter. columns这是一个元组(1, 3, 5) ,您可以*在函数调用中使用运算符对其进行解包。扩展列表或元组,*使其值作为单独的参数发送,而不是将整个元组作为一个参数传递。

例如:func(*(1, 2, 3))==func(1, 2, 3)

所以你需要的是:

columns=1,3,5
print operator.itemgetter(*columns)(lista)
于 2013-07-17T22:40:55.490 回答