TypeErrorを含むコードがあります。 「リストインデックスはリストではなく整数でなければなりません」が、整数です。何が悪いのか理解するのを手伝ってくれてありがとう。必要なのは、異なる値を持つソース7x5タブからマトリックス7x5を取得することです。エラーは最後の行で発生します。
lines = []
with open("text.txt") as f:
for line in f:
line = [int(x) for x in line if (x != ' ') and (x != '\n')]
lines.append(line)
f.close()
ファイルを読んだ後に持っているのは、「行」と呼ばれる番号のリストのリストです。それは整数です。文字列ではありません。お気に入り:
>> [[1, 2, 3...], [4, 5, 6...], [7, 8, 9...],[...]]
i = 1
j = 1
T = []
T.append(lines[0][0])
最後の行(i-1
など)。しかし、私はそれが実際にはpython-wayだとは思いません。私もこのことで助けていただければ幸いです。
for i in lines:
for j in lines:
T[i][j] = lines[i][j] + max(T[i][j-1], T[i-1][j])
ここでエラーが発生します。 i
、j
がすでにint
である場合、何を修正すればよいかわかりません。
i
とj
はインデックスではありません。それらはlines
リストの値です。 Python for
ループは for-each構文 です。
使用する:
for i, line in enumerate(lines):
for j, value in enumerate(line):
T[i][j] = value + max(T[i][j - 1 % len(T[i])] + T[i - 1 % len(T)][j])
ここで、% len()
計算は、T
および/またはi
がT[i]
の場合、j
または0
の最後のエントリに「ラップアラウンド」します。 enumerate()
function は、ループにインデックスを追加します。
これは、T
にリスト構造のネストされたリストがすでに作成されていることを前提としています。
for i in lines:
for j in lines:
i
とj
は、インデックスではなく、lines
の要素を反復処理します。つまり、i
とj
は常にリストであり、数字の行全体です。
インデックスを調べたい場合(通常は調べませんが、ここでは最良のオプションかもしれません)、
for i in range(len(lines)):
for j in range(len(lines[i])):
Python設計者は、デフォルトでシーケンスの要素を反復処理することを望んでいるため、これは設計上厄介です。
また、ループは最初の行の前と最初の列の前にlines
の要素にアクセスしようとすることに注意してください。おそらく、2番目の行と列でループを開始したいと思うでしょう。