首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回按索引值排序的索引列表,如果绑定,则返回位置

返回按索引值排序的索引列表,如果绑定,则返回位置
EN

Stack Overflow用户
提问于 2021-10-31 19:39:23
回答 1查看 56关注 0票数 1

我在学习python的时候遇到了这个问题:

我编写了一个函数,该函数根据输入生成分数列表(其中我使用索引来引用球员),例如:

代码语言:javascript
运行
复制
scores = [5, 15, 0, 25, 20, 15]

我想创建一个指数降序的排名列表,如果有相同得分的球员,按指数较低的球员排名。对于上面的示例,我希望返回以下内容:

代码语言:javascript
运行
复制
ranking = [3, 4, 1, 5, 0, 2]

我最接近的解决方案是对它进行排序,然后获得每个值的索引,如下所示:

代码语言:javascript
运行
复制
ranking = [ranking.index(x) for x in sorted(ranking, reverse=True)]

但这将获取它遇到的第一个x的索引,因此它返回

代码语言:javascript
运行
复制
[3, 4, 1, 1, 0, 2]

忽略那些价值相同的玩家。有没有一种只用纯python就能做到的方法呢?没有库或任何东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-31 19:42:34

您可以使用值作为键对索引列表进行排序:

代码语言:javascript
运行
复制
sorted(range(len(scores)), key=scores.__getitem__, reverse=True)

另一种方法是对(rank, index)的元组进行排序,并提取第二个元素:

代码语言:javascript
运行
复制
[x[1] for x in sorted((x[::-1] for x in enumerate(scores)), reverse=True)]

这两种算法都比使用index对每个元素进行线性搜索更有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69790006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档