比方說,我有一個數組定義爲多維分層原始的Python
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
,我希望得到的垂直切片,返回[2, 5, 8]
。有沒有辦法在直接Python中切分語法?當我嘗試查找多維切片時,我傾向於看到的唯一結果都是關於numpy的討論,並且使用在那裏討論的語法給出了原始Python中的錯誤。
比方說,我有一個數組定義爲多維分層原始的Python
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
,我希望得到的垂直切片,返回[2, 5, 8]
。有沒有辦法在直接Python中切分語法?當我嘗試查找多維切片時,我傾向於看到的唯一結果都是關於numpy的討論,並且使用在那裏討論的語法給出了原始Python中的錯誤。
當然。你通常可以使用for循環。或者只是你可以這樣編碼:
>>> test = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
>>> [row[1] for row in test]
[2, 5, 8]
這段代碼將生成一個垂直切片的新列表。如果你真的需要一個切片操作,下面的代碼將是有益的:
>>> [item for sublist in test for item in sublist][1::len(test[0])]
[2, 5, 8]
我知道我可以使用一個循環,但有沒有辦法用切片表達式來做到這一點? –
你是什麼意思的「切片表達」? – Sheng
http://docs.python.org/2/tutorial/introduction.html(搜索'切片') –
我不知道的一個直接的方式來獲得的垂直切片,這可能是更昂貴的比列表理解答案,但依然
z = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
list(zip(*z)[1])
[2, 5, 8]
或者這可能會略有減少昂貴
from itertools import izip, islice
list(*islice(izip(*z), 1, 2))
[2, 5, 8]
'[內[1]用於外內]'? –