2014-06-08 127 views
1

我有兩個列表a=[10,5,6,8]b=[1,3]。我怎樣才能用後者作爲前者的下標?即我想提取a的第二和第四個元素。Python中的列表索引

把否則,in Matlab I would use

v = [16 5 9 4 2 11 7 14]; 

v([1 5 6])  % Extract the first, fifth, and sixth elements 
>> ans = 
     16 2 11 

我怎樣才能做到在Python一樣嗎?

+1

如果您來自Matlab,您是否將這些列表用於類似matlab的數組操作? – DSM

+1

要添加註釋,數組索引從python中的0開始。 – shahkalpesh

+0

看看http://stackoverflow.com/questions/18272160/access-multiple-elements-of-list-knowing-their-index –

回答

7

來解釋您可以使用operator.itemgetter做它:

from operator import itemgetter 

a=[10,5,6,8] 
b=[1,3] 
res = itemgetter(*b)(a) 
# (5, 8) 
6

可以使用list comprehension像這樣:

>>> a = [10, 5, 6, 8] 
>>> b = [1, 3] 
>>> [a[x] for x in b] 
[5, 8] 
>>> 
2
l=[1 5 6] 
v = [16 5 9 4 2 11 7 14]; 
[v[i] for i in l] 

你可以嘗試這樣的

它可以像這樣

for i in l: 
    print v[i] 
2
a=[10,5,6,8] 
b=[1,3] 

ex = [a[i] for i in b] 
print(ex) # [5, 8] 
3

numpy支持使用數組以及其他一些陣列和矩陣運算,以Matlab風格進行索引。考慮將其用於計算密集型任務:

In [1]: import numpy as np 

In [2]: a = np.array([10,5,6,8]) 

In [3]: b = np.array([1,3]) 

In [4]: a[b] 
Out[4]: array([5, 8]) 
+0

雖然答案是有幫助的,numpy不是標準模塊的一部分。所以,它會下載OP詢問的功能。 – shahkalpesh

+1

@shahkalpesh可以假設如果來自matlab,OP會或者想要或者已經安裝了numpy/scipy/pandas等等...... –

+0

@JonClements:我沒有那種背景來承擔事情。列表理解是內置的,所以它很簡單。 – shahkalpesh