Еще один цикл итерации списка
Как правильно написать этот код?
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]))