Python - 在矩阵中读取第n行

时间:2013-11-04 02:16:13

标签: python for-loop matrix line

我能阅读矩阵第n个字母的最简单方法是什么?

我认为这可以通过一个简单的for循环来实现,但到目前为止我还没有运气。 到目前为止,我能做的最好的事情是使用一个不太优雅的计数:

matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]

count = 0
for n in matrix:
     print matrix[count][nth]
     count += 1

例如: 读取每行的第0个数字:1,2,1。 读取每行的第4个数字:6,2,8。

9 个答案:

答案 0 :(得分:3)

如果您需要进行大量操作,可以使用zip(*matrix)

转置矩阵
>>> matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]
>>> matrix_t = zip(*matrix)
>>> matrix_t
[(1, 2, 1), (3, 6, 6), (5, 1, 2), (2, 6, 6), (6, 2, 8), (2, 5, 2), (4, 7, 6)]
>>> matrix_t[0]
(1, 2, 1)
>>> matrix_t[3]
(2, 6, 6)

答案 1 :(得分:2)

这里可以处理不同长度的行(如示例所示),并支持Python对负索引的特殊解释,相对于序列的结尾(通过将它们更改为len(s) + n):< / p>

NULL = type('NULL', (object,), {'__repr__': lambda self: '<NULL>'})()

def nth_elems(n):
    abs_n = abs(n)
    return [row[n] if abs_n < len(row) else NULL for row in matrix]

matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]

print nth_elems(0)   # [1, 2, 1]
print nth_elems(6)   # [4, 7, 6]
print nth_elems(7)   # [1, <NULL>, <NULL>]
print nth_elems(-1)  # [1, 7, 6]

答案 2 :(得分:1)

In [1]: matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]

In [2]: nth=0

In [3]: [row[nth] for row in matrix]
Out[3]: [1, 2, 1]

In [4]: nth=4

In [5]: [row[nth] for row in matrix]
Out[5]: [6, 2, 8]

答案 3 :(得分:1)

也许这样?

column = [row[0] for row in matrix]

(对于第0个元素)

答案 4 :(得分:1)

这是使用列表理解的解决方案:

[x[0] for x in matrix]

基本上,等于:

for x in matrix:
    print x[0]

你也可以把它变成一个功能:

def getColumn(lst, col):
    return [i[col] for i in lst]

演示:

>>> matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]
>>> def getColumn(lst, col):
    return [i[col] for i in lst]

>>> getColumn(matrix, 0)
[1, 2, 1]
>>> getColumn(matrix, 5)
[2, 5, 2]

希望这有帮助!

答案 5 :(得分:1)

List comprehensions可以在这里运作良好:

>>> matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]
>>> # Get all the 0th indexes
>>> a = [item[0] for item in matrix]
>>> a
[1, 2, 1]
>>> # Get all the 4th indexes
>>> b = [item[4] for item in matrix]
>>> b
[6, 2, 8]
>>>

答案 6 :(得分:1)

你的for循环很可能没有达到预期效果。 n不是整数。这是当前行。 我想你想做的是:

for row in matrix:
    print row[0], row[4]

打印,

1 6
2 2
1 8

另外,严格地说,矩阵是一个列表列表。要真的有一个矩阵,你可能需要使用numpy。

答案 7 :(得分:1)

Python中的列表不应该像这样使用。如果数据足够大,使用列表推导可能会导致内存和CPU问题。如果这是一个问题,请考虑使用numpy

答案 8 :(得分:1)

使用zip:

>>> matrix = [[1, 3, 5, 2, 6, 2, 4, 1], [2, 6, 1, 6, 2, 5, 7], [1, 6, 2, 6, 8, 2, 6]]
>>> zip(*matrix)[0]
(1, 2, 1)
>>> zip(*matrix)[4]
(6, 2, 8)