2015-04-15 77 views
-2

如果我有一個二維數組:Python列表理解了二維數組

[['Wolfe Lane Community Garden', 'X', 'XXX', 'XX', 
'XXXXX', 'XX', 'XXX', '0.05', 'XXXX'], ...] 

我只是要提取的第一個元素和第八元素。我如何使用列表理解來做到這一點?還是過濾功能?

需要使用列表理解。

+7

爲什麼不能簡單地'[L [0],L [6 ]]'? –

+0

那些字面X或只是佔位符?我認爲你想獲得不完全由X構成的元素。 –

+0

正確的我意識到它應該是索引[0,7]而不是6.不太清楚爲什麼每個人都在說6 ... – user2006018

回答

1

爲什麼不只是:

myarray = ['Wolfe Lane Community Garden', 'X', 'XXX', 'XX', 
      'XXXXX', 'XX', 'XXX', '0.05', 'XXXX'] 
first = myarray[0] 
seventh = myarray[6] 

變量名後,中括號代表數組中的元素被訪問。

3

聽起來像你想列表中的每個子列表中的第一個和第八個元素。如果你必須使用列表理解,你可以使用enumerate

data = [['Wolfe Lane Community Garden', 'X', 'XXX', 'XX', 
     'XXXXX', 'XX', 'XXX', '0.05', 'XXXX'], ...] 

indices = [0, 7] 

[[x for i, x in enumerate(sublist) if i in indices] for sublist in data] 

提到其他的答案,它採用了修真通過索引,而不是全部的每個子列表迭代之一,是更有效的。

值得一提的是,你還可以使用numpy做這樣索引:

import numpy as np 
data_arr = np.array(data) 
data_arr[:, indices] 
+0

謝謝,我意識到我沒必要,但我需要。 – user2006018

+0

我需要使用LC,但它是一個2D數組。 – user2006018

+0

對於n長度數組: [el for index,el列舉(列表)if(索引== 0或索引== len(列表)-1)] – Kelvin17

1

有什麼理由,你不能只是搶基於索引的項目?這將是最簡單的方法,特別是因爲你知道你需要得到什麼物品。

3

你可以步驟:

l = [['Wolfe Lane Community Garden', 'X', 'XXX', 'XX', 
'XXXXX', 'XX', 'XXX', '0.05', 'XXXX']] 

print([sub[::7] for sub in l]) 
[['Wolfe Lane Community Garden', '0.05']] 

使用CoMP對應列表的列表:

print([[sub[x]for x in (0,7)] for sub in l ]) 


[['Wolfe Lane Community Garden', '0.05']] 

索引沒有環:

print([[sub[0], sub[7]] for sub in l ]) 

[['Wolfe Lane Community Garden', '0.05']] 

或者使用CoMP和平板列表:

print([sub[x] for sub in l for x in (0,7) ]) 
['Wolfe Lane Community Garden', '0.05'] 

您使用哪個取決於您是想要一個平面列表還是列表列表。

如果你想要一個有效的方式來拉平使用itertools.chain

from itertools import chain 

print(list(chain.from_iterable((sub[0],sub[7]) for sub in l))) 

,你實際上可以做一個列表比較:

print([ele for ele in chain.from_iterable((sub[0],sub[7]) for sub in l)]) 
+0

感謝!!!你很棒! – user2006018

+0

不用擔心,不完全確定這些限制是什麼,但是您應該從答案中獲得一些啓發;) –

0

最好的辦法是使用operator.itemgetter()map()

from operator import itemgetter 

data = [['Wolfe Lane Community Garden', 'X', 'XXX', 'XX', 'XXXXX', 'XX', 'XXX', '0.05', 'XXXX']] 

print map(itemgetter(0, 7), data) 
# OUT: [('Wolfe Lane Community Garden', '0.05')] 
0

代碼:

lst = [['Wolfe Lane Community Garden', 'X', 'XXX', 'XX', 'XXXXX', 'XX', 'XXX', '0.05', 'XXXX'], ...] 

使用map fucnction:使用list推導

print map(lambda x: [x[0], x[6]], lst) 

print [[x[0], x[6]] for x in lst]