如何在Python中生成矩阵?

如何在Python中生成矩阵?,python,matrix,Python,Matrix,我在谷歌上搜索了StackOverflow和YouTube。。我就是不能让Python中的矩阵在我的脑海中点击。有人能帮我吗?我只是想创建一个基本的5x5框,显示: A A A A A B B B B B C C C C C D D D D D E E E E E 我得到 但我甚至无法让它们打断这些线,相反,它们会显示为 [['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A',

我在谷歌上搜索了StackOverflow和YouTube。。我就是不能让Python中的矩阵在我的脑海中点击。有人能帮我吗?我只是想创建一个基本的5x5框,显示:

A A A A A
B B B B B
C C C C C
D D D D D
E E E E E
我得到

但我甚至无法让它们打断这些线,相反,它们会显示为

[['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E']]
如果我尝试向它们添加\n或打印“”,等等,它就是不起作用\n将显示为“A\n”,并且打印将显示在矩阵之前

请有人帮帮我,即使你把我带到一个非常明显的地方,让我看起来像个白痴,我也只想学这个。

循环帮助:

for row in matrix:
    print ' '.join(row)
或者使用嵌套的
str.join()
调用:

print '\n'.join([' '.join(row) for row in matrix])
演示:

如果要显示转置的行和列,请使用;如果将每一行作为单独的参数传递给函数,
zip()
将这些值按值重新组合为列的元组。
*args
语法允许您将整个行序列作为单独的参数应用:

>>> for cols in zip(*matrix):  # transposed
...     print ' '.join(cols)
... 
A A A A A
B B B B B
C C C C C
D D D D D
E E E E E

你问题的答案取决于你的学习目标。如果您试图让矩阵“单击”,以便稍后使用,我建议您查看Numpy
数组,而不是列表列表。这将使您可以轻松地切片出行、列和子集。只要试着从列表中获取一列,你就会感到沮丧

使用列表列表作为矩阵。。。 让我们以您的列表为例:

L = [list("ABCDE") for i in range(5)]
很容易获得任意行的子元素:

>>> L[1][0:3]
['A', 'B', 'C']
或整行:

>>> L[1][:]
['A', 'B', 'C', 'D', 'E']
但是试着反过来,以列格式获得相同的元素,它将不起作用

>>> L[0:3][1]
['A', 'B', 'C', 'D', 'E']

>>> L[:][1]
['A', 'B', 'C', 'D', 'E']
您必须使用列表理解之类的方法来获取所有第1个元素

>>> [x[1] for x in L]
['B', 'B', 'B', 'B', 'B']
输入矩阵 如果改用数组,您将获得MATLAB或R(或其他大多数语言)所期望的切片和索引:

抓取第1行(与列表一样):

抓斗柱1(新!):

现在要生成打印矩阵:

for mycol in Y.transpose():
    print " ".join(mycol)


A A A A A
B B B B B
C C C C C
D D D D D
E E E E E

您还可以使用append函数

b = [ ]

for x in range(0, 5):
    b.append(["O"] * 5)

def print_b(b):
    for row in b:
        print " ".join(row)

你可以这样做:

matrix = [["A, B, C, D, E"]*5]
print(matrix)


[['A, B, C, D, E', 'A, B, C, D, E', 'A, B, C, D, E', 'A, B, C, D, E', 'A, B, C, D, E']]

我得到了一个简单的解决方法,将列表转换成字符串,并执行字符串操作以正确打印出矩阵

创建函数 通过创建一个函数,可以省去每次打印矩阵时编写
for
循环的麻烦

def print_matrix(matrix):
    for row in matrix:
        new_row = str(row)
        new_row = new_row.replace(',','')
        new_row = new_row.replace('[','')
        new_row = new_row.replace(']','')
        print(new_row)
例子 以
0
作为每个条目的5x5矩阵示例:

>>> test_matrix = [[0] * 5 for i in range(5)]
>>> print_matrix(test_matrix)
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0 
>>> test_matrix = [[0] * 3 for i in range(2)]
>>> print_matrix(test_matrix)
0 0 0
0 0 0
每个条目均为
0
的2x3矩阵示例:

>>> test_matrix = [[0] * 5 for i in range(5)]
>>> print_matrix(test_matrix)
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0 
>>> test_matrix = [[0] * 3 for i in range(2)]
>>> print_matrix(test_matrix)
0 0 0
0 0 0

编辑 如果要使其打印:

A A A A A
B B B B B
C C C C C
D D D D D 
E E E E E

我建议您改变将数据输入列表的方式。在我的方法中,较大列表中的每个列表表示矩阵中的一行,而不是列。

如果不想使用numpy,可以使用列表概念。要创建任何二维数组,只需使用以下语法:

  mat = [[input() for i in range (col)] for j in range (row)]

然后输入所需的值。

请显示用于尝试执行此操作的代码。如果您希望对矩阵进行大量操作,您可能需要查看。如果您的列包含您想要处理的不同数据类型,您可能需要查看。@icktoofay:请参阅@Martjin:好的。我没有意识到这会对性能产生重大影响。非常感谢!这对我帮助很大:)这是一个合理的解决方案,但不会像最初发布的那样在列中打印“行”。@beroe:你知道,我似乎错过了转置;在中添加了这一点。但是,numpy数组对于非数字数据没有多大意义。我不知道?因为这样一来,它们在性能(它们将字符串存储为Python对象)或便利性(它们对于计算来说最方便)方面就买不到太多了。OP可能希望通过完成简单的任务来学习Python的基础知识,为此,使用列表是一个完美的练习。你的用户名很有趣。一开始我对它一无所知。
>>> test_matrix = [[0] * 3 for i in range(2)]
>>> print_matrix(test_matrix)
0 0 0
0 0 0
A A A A A
B B B B B
C C C C C
D D D D D 
E E E E E
  mat = [[input() for i in range (col)] for j in range (row)]