2014-02-25 32 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]