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