已知: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]