如何解决Python生成分数排行榜时字符串排序错误的问题
排行榜排序问题修复方案
你遇到的排序错误是因为Python默认对完整字符串做字典序排序,没有把条目开头的分数提取为数值类型参与比较,比如字符串"50xxx"按字典序会比"2000xxx"大,因为首字符'5'的编码比'2'高,才会出现不符合预期的排序结果。
修正后代码
import re # 读取前5行非空的分数条目 with open("scores.txt", "r", encoding="utf-8") as f: score_items = [line.strip() for line in f if line.strip()][:5] # 按条目开头的数字分数倒序排序 sorted_items = sorted( score_items, # 匹配每个条目开头的连续数字转整数作为排序依据 key=lambda item: int(re.match(r"^\d+", item).group()), reverse=True ) # 输出结果 print("原始条目:", " ".join(score_items)) print("排序后条目:", " ".join(sorted_items))
补充说明
- 用
with语法操作文件,不需要手动调用close(),自动释放文件资源,避免出错 - 如果你的条目里分数和用户名是用空格分隔的(格式示例:
100 coolguy),可以把排序的key替换为lambda x: int(x.split()[0]),不需要引入正则依赖 - 批量读取非空行取前5条的写法,比手动定义5个变量更简洁,后续要调整上榜人数只需要修改切片的数值即可
内容的提问来源于stack exchange,提问作者coolguy11
相关产品推荐
相关产品推荐

