You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python纯实现按值降序、同分按索引升序排序索引列表的方法

Python生成符合规则的玩家排名列表解决方案

问题核心

你之前的写法存在两个问题:

  • 直接对分数排序后用index()查找对应索引,相同分数只会返回第一个匹配的索引,导致同分数玩家的索引重复
  • 原代码中误将ranking作为排序对象,逻辑上应该基于原始scores列表处理

原生实现方案

核心思路是把原索引和分数绑定后再排序,排序键同时考虑分数降序、索引升序的规则:

scores = [5, 15, 0, 25, 20, 15]
# 用enumerate绑定(原索引, 分数),按(-分数, 原索引)升序排序(等价于分数降序、索引升序)
sorted_items = sorted(enumerate(scores), key=lambda item: (-item[1], item[0]))
# 提取排序后的原索引得到排名列表
ranking = [idx for idx, score in sorted_items]
print(ranking) # 输出:[3, 4, 1, 5, 0, 2]

原理说明

  • enumerate(scores)会生成(索引, 分数)的元组迭代器,每个元素都和原索引一一绑定,不会出现匹配错误
  • 排序键lambda item: (-item[1], item[0])的作用:
    • 首先取-item[1](负的分数)作为第一排序条件:sorted默认升序,分数越高对应的负值越小,会排在更前面
    • 其次取item[0](原索引)作为第二排序条件:同分数的情况下,索引越小越靠前,完全匹配规则要求

内容的提问来源于stack exchange,提问作者7madaGIH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:15:04