我能阅读矩阵第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。
答案 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)