如果我有一個二維數組:Python列表理解了二維數組
[['Wolfe Lane Community Garden', 'X', 'XXX', 'XX',
'XXXXX', 'XX', 'XXX', '0.05', 'XXXX'], ...]
我只是要提取的第一個元素和第八元素。我如何使用列表理解來做到這一點?還是過濾功能?
我需要使用列表理解。
如果我有一個二維數組:Python列表理解了二維數組
[['Wolfe Lane Community Garden', 'X', 'XXX', 'XX',
'XXXXX', 'XX', 'XXX', '0.05', 'XXXX'], ...]
我只是要提取的第一個元素和第八元素。我如何使用列表理解來做到這一點?還是過濾功能?
我需要使用列表理解。
爲什麼不只是:
myarray = ['Wolfe Lane Community Garden', 'X', 'XXX', 'XX',
'XXXXX', 'XX', 'XXX', '0.05', 'XXXX']
first = myarray[0]
seventh = myarray[6]
變量名後,中括號代表數組中的元素被訪問。
聽起來像你想列表中的每個子列表中的第一個和第八個元素。如果你必須使用列表理解,你可以使用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]
謝謝,我意識到我沒必要,但我需要。 – user2006018
我需要使用LC,但它是一個2D數組。 – user2006018
對於n長度數組: [el for index,el列舉(列表)if(索引== 0或索引== len(列表)-1)] – Kelvin17
有什麼理由,你不能只是搶基於索引的項目?這將是最簡單的方法,特別是因爲你知道你需要得到什麼物品。
你可以步驟:
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)])
感謝!!!你很棒! – user2006018
不用擔心,不完全確定這些限制是什麼,但是您應該從答案中獲得一些啓發;) –
最好的辦法是使用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')]
代碼:
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]
爲什麼不能簡單地'[L [0],L [6 ]]'? –
那些字面X或只是佔位符?我認爲你想獲得不完全由X構成的元素。 –
正確的我意識到它應該是索引[0,7]而不是6.不太清楚爲什麼每個人都在說6 ... – user2006018