求list中数字的排序

已知:list中数字越大,则这个数字对应的排序越低。从1开始排序
例如:list=[4,6,9]则输出的排序为[3,2,1]

如果list中的数字有重复的 则计算平均值
例如:list=[1,1,1,2]
对应的排序原应为:[4,3,2,1]
然而1出现了三次 此时需计算1的排序的平均值(4+3+2)/3=3
输出排序:[3,3,3,1]

感谢!

可以给个例子你参考

lst =  [1,1,1,4]
rank = []
lst1 = []
for i in lst:
    rank.append(i)
    lst1.append(i)



for i in range(1, len(lst) + 1):
    if len(lst) >= 1:
        index = lst.index(max(lst))
        rank[index] = i
        print(lst,index,rank)
        lst[index] = -1
for temp in range(len(lst1)):
    for i in range(len(lst1)):
        for j in range(i+1, len(lst1)):
            if lst1[i] == lst1[j]:
                rank[i] = int((rank[i] + rank[j]) / 2)
                rank[j] = rank[i]
print(rank)

是这个效果不?

mylist = [4,6,9]
mylist2 = [1,1,1,2]
mylist3 = [1,2,1,4,1,6,9,6,6]

def sort_list(mylist) -> list:
    new_list = sorted(mylist,reverse=True)
    mark = list(range(1, len(mylist)+1))
    pos = [new_list.index(i)+1 for i in new_list]
    new_pos = []
    for i in range(len(mylist)):
        if pos[i] == mark[i]:
            new_pos.append(pos[i])
        else:
            new_pos.append((mark[i]+pos[i])/2)
            for j in range(i-(mark[i]-pos[i]), i):
                new_pos[j] = (mark[i]+pos[i])/2
    mydict = {new_list[i]:int(new_pos[i]) for i in range(len(mylist))}
    return [mydict[i] for i in mylist]

print(sort_list(mylist))
print(sort_list(mylist2))
print(sort_list(mylist3))

运行结果:
[3, 2, 1]
[3, 3, 3, 1]
[8, 6, 8, 5, 8, 3, 1, 3, 3]