2013-04-10 41 views
2

我真的很陌生,所以我很抱歉如果这是一个非常简单的问题,但是我一直试图在矩阵中打印第一列而不使用numpy,但是它打印像这样:在矩阵中打印一个没有numpy的列

matrix = \ 
[[0, 1], 
[3, 7], 
[9, 4], 
[10, 3]] 

print matrix[0:3][0] 
[0, 1] 

我也试过:

print matrix[:][0] 
[0, 1] 

print matrix[:3] 
[[0, 1], [3, 7], [9, 4]] 

print matrix[:3][0] 
[[0, 1], [3, 7], [9, 4]] 

我想要实现的答案是:

print matrix[code] 
0, 3, 9, 10 

或类似的。

+0

我不确定你为什么认为'matrix [:3]'应该输出你给出的结果 - 切片语法是'slicable [start:stop:step]',(默认为0,len(可切片)和1如果没有给出,那么'[:3]'表示,从0开始,停在3。 – 2013-04-10 23:02:50

+0

啊,太真了。感谢您的更正! – 2013-04-14 00:07:08

回答

5

你有什么是列表的列表 - 所以没有列的概念。有两种方法可以做到这一点,一种是(如Pavel Anossov's answer所示)是使用列表理解。

一种是使用zip()可用于转置的迭代:

>>> list(zip(*matrix)) 
[(0, 3, 9, 10), (1, 7, 4, 3)] 

我做了它的清单在这里更容易地显示输出。注意在2.x中,zip()给出了一个列表而不是迭代器(尽管懒惰版本可用作itertools.izip())。

一般来说,如果您打算处理多个列,我会使用zip(),如果您只需要一个列表,我会使用列表理解。

3

这是不可能切片没有numpy。你可以使用列表理解:

print [row[0] for row in matrix]