我有一个包含姓名和分数的.csv文件。以下是文件内容(名称和分数在不同的列中):
Bob 1
Dave 6
Linda 9.76
Andy 90
hilary 87
mathew 6.4576589
程序应显示从最高到最低的分数。像这样:
Bob 1
Dave 6
mathew 6.4576589
Linda 9.76
hilary 89
Andy 90
我一直在尝试这个。以下是我的代码:
import csv
import operator
out_file = open('class1_scores_max.csv','r')
scores1 = csv.reader(out_file,delimiter=',')
sort = sorted(scores1,key = lambda x: float(x[1]))
for eachline in sort:
final = eachline[0]," ",eachline[1]
print (''.join(final))
这项工作完全在一个单独的python文件中,但在我在学校的主要控制评估中,它出现了错误:
IndexError: list index out of range
在我在学校的主要代码中,它是定义(子例程)的一部分。有人可以帮忙吗?
答案 0 :(得分:1)
根据您提供的内容,您可以在这两行中获得IndexError
:
sort = sorted(scores1,key = lambda x: float(x[1]))
或
final = eachline[0]," ",eachline[1]
我怀疑你IndexError
位于第一行,因为在第二行获得IndexError
似乎意味着它在第一行也会出现
您可以通过在排序和打印之前确保每行中有两个元素来解决此问题。
sort = sorted([x for x in scores1 if len(x) == 2], key = lambda x: float(x[1]))
这也是学习调试基础知识的好时机。假设您没有从互联网获得帮助,并且必须自己调试此问题。添加一些打印语句是调试代码的最快捷,最简单的方法之一。例如,
import csv
import operator
out_file = open('class1_scores_max.csv','r')
scores1 = csv.reader(out_file,delimiter=',')
for score in scores1:
print score
sort = sorted(scores1,key = lambda x: float(x[1]))
for eachline in sort:
final = eachline[0]," ",eachline[1]
print (''.join(final))
请注意我插入以下行的位置:
for score in scores1:
print score
这样,当您尝试访问{中的元素的第一个和第二个元素时,您可以查看scores1
中是否有任何可能导致IndexError
的内容{1}}。