2011-09-08 119 views
4

我有一個整數列表應該用作另一個列表的索引來檢索一個值。比方說,我們有以下陣列如何在Python中訪問整數列表的特定位置?

a = [1,2,3,4,5,6,7,8,9] 

我們可以利用得到的具體內容如下代碼

import operator 
    operator.itemgetter(1,2,3)(a) 

它將返回第二,第三和第四個項目。

可以說我有另一個列表

b=[1,2,3] 

但是,如果我嘗試運行下面的代碼它得到一個錯誤

operator.itemgetter(b)(a) 

我想知道,如果有人可以幫我請。我認爲它只是我必須將b轉換爲逗號分隔指數的問題,但並不十分確定。

非常感謝

回答

8

使用*:

operator.itemgetter(*b)(a) 

在函數調用手段*,解開這個值,並使用其元素作爲參數傳遞給函數。

0

itemgetter的第一個參數需要是一個元組。你可以這樣做:

apply(operator.itemgetter, tuple(b))(a) 

有可能是這樣做的清潔/更idomatic方式,但這並工作的例子。

3

既然您已爲問題與numpy的標籤,你也可以考慮做一個陣列,使得這部作品:

from numpy import array 
a = array([1,2,3,4,5,6,7,8,9]) 
b = [1,2,3] 
a[b] 
+0

儘管數組(operator.itemgetter(* b)(a))可能不太清晰,但如果需要輸出爲數組,則它比數組(a)[b]更快。因此,如果輸出應該是一個數組,並且您不關心易讀性,那麼還是應該使用Ned的解決方案。 – Daan

0

你還可以嘗試:

map(a.__getitem__, b) 

的代碼返回Python 2中的列表或Python 3中的迭代器。如果您需要將其轉換爲元組,請將其放入tuple()

相關問題