2014-02-25 70 views
0

比方說,我有一個數組定義爲多維分層原始的Python

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

,我希望得到的垂直切片,返回[2, 5, 8]。有沒有辦法在直接Python中切分語法?當我嘗試查找多維切片時,我傾向於看到的唯一結果都是關於numpy的討論,並且使用在那裏討論的語法給出了原始Python中的錯誤。

+0

'[內[1]用於外內]'? –

回答

1

當然。你通常可以使用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] 
+0

我知道我可以使用一個循環,但有沒有辦法用切片表達式來做到這一點? –

+0

你是什麼意思的「切片表達」? – Sheng

+1

http://docs.python.org/2/tutorial/introduction.html(搜索'切片') –

2

我不知道的一個直接的方式來獲得的垂直切片,這可能是更昂貴的比列表理解答案,但依然

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]