python列表排序问题

我有一个随机得到的5位数的列表,比如 ranList = [8, 1, 6, 4, 9] 我想得到按他们的数值大小对应的排名列表 比如得到的结果应该是[4, 1, 3, 2, 5] 请问该如何操作


ranList = [8, 1, 6, 4, 9]
sortlist = sorted(ranList) # 先将列表排序存到新列表

test=[sortlist.index(i) + 1 for i in ranList] # 这里找新列表对应旧列表的索引

print(test) #这里输出对应位置排名
ranList = [8, 1, 6, 4, 9]

newlist = sorted(ranList)

print([newlist.index(i)+1 for i in ranList])

 

可以用字典,得出大小后将对应的value加入新的列表即可

https://blog.csdn.net/qq_18560985/article/details/123024186


ranList = [8, 1, 6, 4, 9]
tmpList = sorted(ranList)

rankList = [tmpList.index(i)+1 for i in ranList]
print(rankList)

Out: [4, 1, 3, 2, 5]

numpy 有一个函数叫argsort,得到元素排序的索引,之后再排序一次得到按照你的顺序的索引
···
import numpy as np
[i[1] for i in sorted(zip(np.argsort(ranList),range(1,6)),key=lambda x:x[0])]
```

这个用pandas就可以解决了

import pandas as pd
ranList = [8, 1, 6, 4, 9]
a = pd.DataFrame(ranList)
list(a.rank()[0])

如有用请采纳


def array_sort_index(target_array: list) -> list:
    """
    传入需要排序的array
    :param target_array:
    :return:
    """
    index_json = {}
    sort_array = sorted(target_array, reverse=False)
    for i in range(len(sort_array)):
        index_json[sort_array[i]] = i + 1
    result_array = [index_json[i] for i in target_array]
    return result_array


if __name__ == '__main__':
    ranList = [8, 1, 6, 4, 9]
    print(ranList)
    result = array_sort_index(target_array=ranList)
    print(result)

img


有用的话点一下采纳

考虑用字典实现

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author: Roc-xb
"""
import pandas as pd

if __name__ == '__main__':
    ranList = [8, 1, 6, 4, 9]
    series = pd.DataFrame(ranList).rank()[0]
    result = series.fillna('0').astype('int32').values.tolist()
    print("ranList:", ranList)
    print("result:", result)

img