我想以这样的方式获得5x5矩阵的输入: (输入甚至可以是字符串)
12345
67894
12345
65431
即获得5个元素/行。
所以我在python中选择了以下方法:
for i in range(5):
j = 0
a[i][j], a[i][j+1], a[i][j+2], a[i][j+3], a[i][j+4] = raw_input()
现在问题是我无法获得矩阵输入,如果n值变为3,等等除了5之外的任何其他值,因为我已经声明了这样
a[i][j], a[i][j+1], a[i][j+2], a[i][j+3], a[i][j+4] = raw_input()
请有人帮助我实现这一目标。
答案 0 :(得分:2)
如果您要使用矩阵运算,我希望您使用numpy。
from numpy import *
def create_matrix(no_rows):
matrix = []
for i in range(no_rows):
row = raw_input("Enter row no "+str(i)+" values:")
matrix.append(tuple(row))
print array(matrix)
create_matrix(5)
输出:
Enter row no 0 values:12345
Enter row no 1 values:12345
Enter row no 2 values:12345
Enter row no 3 values:12345
Enter row no 4 values:12345
[['1' '2' '3' '4' '5']
['1' '2' '3' '4' '5']
['1' '2' '3' '4' '5']
['1' '2' '3' '4' '5']
['1' '2' '3' '4' '5']]
答案 1 :(得分:1)
将维度n
设为变量,并使用map
将输入字符串转换为数字列表:
In [6]: n=5
...: a=[]
...: for i in range(n):
...: a.append(map(int, raw_input()))
...:
12345
67890
76543
23456
13579
In [7]: a
Out[7]:
[[1, 2, 3, 4, 5],
[6, 7, 8, 9, 0],
[7, 6, 5, 4, 3],
[2, 3, 4, 5, 6],
[1, 3, 5, 7, 9]]
注意,上面的代码不会将2D数组限制为n * n方阵。如果您的输入是:
1234
2235
23452346
1234132
1
你会得到:
In [9]: a
Out[9]:
[[1, 2, 3, 4],
[2, 2, 3, 5],
[2, 3, 4, 5, 2, 3, 4, 6],
[1, 2, 3, 4, 1, 3, 2],
[1]]
答案 2 :(得分:0)
你真的应该考虑验证你的输入。
def get_matrix(rows=5, columns=5):
matrix =[]
for i in xrange(rows):
row = raw_input()
assert(len(row) == columns)
matrix.append(row)
return matrix
用法:
>>> get_matrix(1,2)
34
['34']
>>> get_matrix(2,2)
33
45
['33', '45']
>>> get_matrix(2,2)
145
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in get_matrix
AssertionError
答案 3 :(得分:0)
您在问题中向我们展示4x5矩阵,并向5x5矩阵询问解决方案。如果您尝试使用列表输入5x5矩阵,则应该注意Bound Checkings。您必须在索引它们之前声明整个列表。我试过这个并且它有效。
a = [
[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]
]
for i in range(5):
j = 0
a[i][j], a[i][j+1], a[i][j+2], a[i][j+3], a[i][j+4] = input()