2014-02-19 69 views
-1

我想獲得一個5x5矩陣的輸入在這樣的方式: (輸入甚至可以是字符串)分割矩陣輸入在Python

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,7等任何比其他5,自從我宣佈這樣

a[i][j], a[i][j+1], a[i][j+2], a[i][j+3], a[i][j+4] = raw_input() 

請別人幫我實現這個。

回答

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]] 

注意那上面的代碼不會限制你的二維數組的* 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]] 
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 
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']] 
0

您向我們展示4x5的矩陣在你的問題,並要求5x5矩陣解決方案。如果您嘗試使用列表輸入5x5矩陣,您應該小心綁定檢查。在索引它們之前,你必須聲明整個列表。我試過這個,它工作。

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