我有一个随机得到的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)
考虑用字典实现
#!/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)