Python: TypeError: индексы списка должны быть целыми, а не str

Я собираюсь сделать Matrix Addition на Python (не заканчивать). Но это показывает ошибку.

m, n = (int(i) for i in raw_input().split())
a = [[0 for i in range(m)] for j in range(n)]
b = [[0 for i in range(m)] for j in range(n)]
c = []
total = []

for i in range(m):
    x = raw_input()
    for j in range(n):
        value = [int(i) for i in x.split()]
    c[i][j] = a[i][j]
    #c.append(value)
print a
for i in c:
    print i

Я хочу ввести

3 3 - матричная размерность m * n

1 2 3 >

3 2 1 > матрица A

1 3 2 >

1 1 1 >

1 1 1 > матрица B

1 1 1 >

и отображается как

2 3 4 >

4 3 2 > матрица A + B

2 4 3 >

Ответ 1

Вы используете i в своем внешнем цикле for, и это int. Затем в цикле у вас есть:

value = [int(i) for i in x.split()]

который делает i строку (которая возвращает split). Может быть, вы думаете, что внутри [ ] есть какая-то область видимости? Нет. У вас есть столкновение имен, измените один из них.

Ответ 2

Вы используете ту же переменную во внутреннем для цикла.

for i in range(m):
    x = raw_input()
    for j in range(n):
        # variable i is refering to outer loop
        value = [int(p) for p in x.split()]
    c[i][j] = a[i][j]
    #c.append(value)
print a
for i in c:
    print i

Ответ 3

Помимо первых двух ответов у вас возникнет проблема с этим утверждением:

c[i][j] = a[i][j]

Когда цикл начинается i, будет 0, и до сих пор ОК, но c является пустым списком и не имеет итерации в первой позиции, поэтому c[0][0] вернет ошибку. Избавьтесь от него и раскомментируйте следующую строку:

#c.append(value)

EDIT:

Ваш код не вернет то, что вы хотите. Вам лучше сделать что-то подобное, чтобы создать матрицу с заданными сторонами:

for i in range(m):
    d = []
    for j in range(n):
        x = raw_input()
        d.append(int(x))
     c.append(d)

Если у вас есть 3 для m и n, вы создадите матрицу со сторонами 3 x 3, сохраненными в переменной c. Таким образом, вам не нужно разделить пользовательский ввод. Пользователь может дать число за раз. И вы даже можете изменить следующую строку:

x = raw_input()

в

x = raw_input("{0}. row, {1}. column: ".format(i+1, j+1))

Попробуйте!

Ответ 4

import time
m, n = (int(i) for i in raw_input().split())
a = []
b = []
total = [[0 for i in range(n)] for j in range(m)]

for i in range(m):
    x = raw_input()
    for j in range(n):
        value = [int(i) for i in x.split()]
    a.append(value)
#print a


for i in range(m):
    x = raw_input()
    for j in range(n):
        value = [int(i) for i in x.split()]
    b.append(value)
#print b


for i in range(m):
    for j in range(n):
        total[i][j] = a[i][j] + b[i][j]


for i in total:
    print ' '.join(map(str, i))
time.sleep(2)

OK! Я просто понял это! Спасибо вам

Ответ 5

вы также можете нажать эту ошибку, если объявите int и обработайте ее как dict

>>> a = []
>>> a['foo'] = 'bar'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str