Еще один цикл итерации списка

Как правильно написать этот код?

highScore=open('scores.txt',mode='r')
score=[]
i=0
print("\nName\t\tScore")
line=highScore.readline().strip('\n')
while line!="":
    line=str(line).split(', ')
    x=[line[0],int(line[1])]
    score.append(x)
    line=highScore.readline()
z=sorted(score, key=itemgetter(1), reverse=False)
for i in z:
    print(str(z[i][0])+"\t\t"+str(z[i][1]))
    i+=1

Предполагается, чтобы показать имя с вкладкой с баллом той же записи.

Но ошибка показала:

TypeError: list indices must be integers, not list

4 ответа

Решение

Так как i это не индекс, это каждый элемент из вашего списка. Смотрите пример ниже

z = 'abcde'
for i in z:
    print i

a
b
c
d
e

Таким образом, вы хотели бы изменить свой код на

for i in z:
    print(str(i[0])+"\t\t"+str(i[1]))

Просто используйте str.format и получить доступ к подэлементам по индексу:

In [10]: z = [[1,2],[3,4]]


In [11]: for i in z:
   ....:     print("{}        {}".format(i[0],i[1]))
   ....:     
1       2
3       4

Вы перебираете элемент в z так что просто доступ к каждому подэлементу по индексу.

Линия line=highScore.readline().strip('\n') это, вероятно, не то, что вы пытаетесь сделать. Я думаю, что вы хотите прочитать весь файл и разбить на новые строки. Поэтому замените readline на read.

lines = highScore.read().strip('\n')

Тогда вместо цикла while вы можете использовать цикл for

for line in lines:
    for items in line.split(', '):
         score.append(list(items[0], items[1:]))

Я думаю z 2D массив, поэтому замените эту строку:

for i in z:
    print(str(z[i][0])+"\t\t"+str(z[i][1]))
    i+=1

с этим:

for i in z:
    print(str(i[0])+"\t\t"+str(i[1]))
Другие вопросы по тегам