2014-02-19 2 views
-1

Я хотел бы получить ввод матрицы 5х5 таким образом, как это: (вход может быть даже строки)Расщепление матрица ввода в 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() 

Теперь проблема заключается в том, что я не был в состоянии получить входной матрицы, если п значение становится 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]] 

Примечание, что приведенный выше код не ограничивает 2D массив * п квадрат матрица. Если вход:

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

Вы показываете нам 4х5 матрицу в вашем вопросе и просят решение для 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() 
Смежные вопросы