簡體   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