我在学习python的时候遇到了这个问题:
我编写了一个函数,该函数根据输入生成分数列表(其中我使用索引来引用球员),例如:
scores = [5, 15, 0, 25, 20, 15]
我想创建一个指数降序的排名列表,如果有相同得分的球员,按指数较低的球员排名。对于上面的示例,我希望返回以下内容:
ranking = [3, 4, 1, 5, 0, 2]
我最接近的解决方案是对它进行排序,然后获得每个值的索引,如下所示:
ranking = [ranking.index(x) for x in sorted(ranking, reverse=True)]
但这将获取它遇到的第一个x的索引,因此它返回
[3, 4, 1, 1, 0, 2]
忽略那些价值相同的玩家。有没有一种只用纯python就能做到的方法呢?没有库或任何东西。
发布于 2021-10-31 19:42:34
您可以使用值作为键对索引列表进行排序:
sorted(range(len(scores)), key=scores.__getitem__, reverse=True)
另一种方法是对(rank, index)
的元组进行排序,并提取第二个元素:
[x[1] for x in sorted((x[::-1] for x in enumerate(scores)), reverse=True)]
这两种算法都比使用index
对每个元素进行线性搜索更有效。
https://stackoverflow.com/questions/69790006
复制相似问题