如何排序和打印N个高分(最高在前)

How to sort and print N number of high scores (Highest first)

我正在尝试对我的简单游戏的排行榜进行排序并打印出前 5 名的分数,但它只是按照保存时的顺序打印出整个列表,并且在添加后没有组织 for eachline in y[:5]: print(eachline) ,因为没有这段代码,它会按从小到大的数字顺序打印整个列表,这不是我需要的。任何帮助将非常感激。排行榜文件 link:https://drive.google.com/open?id=1w51cgXmmsa1NWMC-F67DMgVi3FgdAdYV

leaders = list()
filename = 'leaderboard.txt'
with open(filename) as fin:
for line in fin:
    leaders.append(line.strip())

y = sorted(leaders, key = lambda x: float(x[0]))
for eachline in y[:5]: #after this and the next line it prints just the file contents
    print(eachline)

部分原因是您的输入文件是结构类似于 "Integer : String" 的字符串。当您打开文件并开始逐行读取并调用 line.strip() 时,您所做的就是从每行字符串的开头和结尾删除所有多余的空格。

考虑到这一点,排序时使用键 lambda x: float(x[0])。这告诉 sorted 函数获取领导列表中的每个人并获取每个字符串的第一个字符(因为领导列表的所有成员都是字符串!),并将第一个字符转换为浮点数。 float(x[0])对于所有排行榜上的人的值是1,这意味着排序算法认为你的值已经排序了!

为了解决这个问题,您可以使用 split()

leaders = list()
filename = 'leaderboard.txt'
with open(filename) as fin:
    for line in fin:
        leaders.append(line.split())
y = sorted(leaders, key = lambda x: float(x[0]), reverse=True)
for eachline in y[:5]: #after this and the next line it prints just the file contents
    print(" ".join(eachline))

输出:

19 : Felix
16 : Muhammad
14 : Steve
13 : David
12 : Alex

您可以通过在排序方法中添加关键字reverse=True来按降序排序。

y = sorted(leaders, key = lambda x: float(x[0]), reverse=True)