web-dev-qa-db-ja.com

Python:TypeError:リストのインデックスはstrではなく整数でなければなりません

PythonでMatrix Additionを実行します(終了しません)。ただし、エラーが表示されます。

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>

外側のiループでforを使用していますが、これはintです。次に、ループであなたが持っている:

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

iを文字列にします(splitが返すもの)。たぶん、[ ]?ありません。名前の衝突があり、そのうちの1つを変更します。

7
cdarke

内部forループで同じ変数を使用しています。

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
1
Nilesh

最初の2つの答えを超えると、このステートメントに問題が生じます。

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

ループが開始すると、iは0になりますが、これまでのところ問題ありませんが、cは空のリストであり、最初の位置に反復可能なものがないため、c[0][0]はエラーを返します。それを取り除き、次の行のコメントを外します。

#c.append(value)

編集:

あなたのコードはあなたが望むものを返しません。与えられた辺を持つマトリックスを作成するには、次のようなものを作成する方が良いでしょう:

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

mnの両方に3がある場合、変数cに保存された辺3 x 3のマトリックスを作成します。この方法では、ユーザー入力を分割する必要はありません。ユーザーは一度に数字を与えることができます。また、次の行を変更することもできます。

x = raw_input()

に:

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

やってみよう!

1
cezar

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
0
r_2
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!私はちょうどそれを理解しました!ありがとうございました