在Python中拆分矩阵输入

时间:2014-02-19 06:38:57

标签: list matrix python-2.x

我想以这样的方式获得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() 

请有人帮助我实现这一目标。

4 个答案:

答案 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()