Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
612 views
in Technique[技术] by (71.8m points)

python - TypeError: list indices must be integers, not list. How to fix?

There's the code with the TypeError in it. "list indices must be integers, not list", though they are integers. I'd appreciate you helping me figure out what's wrong. What I need is to get matrix 7x5 from source 7x5 tab with different values. The error occurs on the last line.

lines = []

with open("text.txt") as f:
    for line in f:
        line = [int(x) for x in line if (x != ' ') and (x != '
')]
        lines.append(line)
    f.close()

What I have after reading file is list of lists with numbers called "lines". It's integers. Not strings. Like:

>> [[1, 2, 3...], [4, 5, 6...], [7, 8, 9...],[...]]


i = 1
j = 1
T = []
T.append(lines[0][0]) 

I made this for avoiding IndexError (list out of range) on last line (i-1 and stuff). Though, I don't think it's python-way really. I'd appreciate help with this thing too.

for i in lines:
    for j in lines:
        T[i][j] = lines[i][j] + max(T[i][j-1], T[i-1][j])

This is where error occurs. I don't get what should I fix if i, j are already int.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

i and j are not indices; they are values from the lines list. Python for loops are for-each constructs.

Use:

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])

where the % len() calculations 'wrap around' to the last entry in T or T[i] when i and / or j are 0. The enumerate() function adds indices to the loop.

This does assume you already pre-built a nested list of lists structure in T.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...