繁体   English   中英

为什么Python operator.itemgetter以逗号分隔的数字列表作为索引,但是当相同的列表打包在变量中时却不行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM