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