列表的另一个循环迭代

时间:2014-08-23 13:33:25

标签: python for-loop while-loop python-3.1

如何正确编写此代码?

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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我认为z是一个二维数组,所以要替换这一行:

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

答案 2 :(得分:0)

只需使用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中的元素,因此只需通过索引访问每个子元素。

答案 3 :(得分:0)

line=highScore.readline().strip('\n')行可能不是您尝试做的。我想你想要读取整个文件并按新行划分。所以用read。替换readline。

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

然后,您可以使用for循环

而不是while循环
for line in lines:
    for items in line.split(', '):
         score.append(list(items[0], items[1:]))