Как изменить значение с самого низкого на самое высокое в Python?

#python #ranking

#питон #Рейтинг

Вопрос:

Я пытаюсь переставить набор чисел, однако я пытаюсь, чтобы наименьшее число имело наивысший ранг

Мой вклад-это список=[312198.0, 306400.0, 270345.0, 367979.0, 375502.0]

и мой желаемый результат-ранг=[3,4,5,2,1]

Мой код таков:

 list=[312198.0, 306400.0, 270345.0, 367979.0, 375502.0] seq = sorted(x) index = [seq.index(v) for v in x] print(index)  

Мой текущий выход составляет [2, 1, 0, 3, 4]

Комментарии:

1. index = [seq.index(v) 1 for v in x] ?

2. [seq.index(v) 1 for v in x] ?

Ответ №1:

У вас просто есть это на самом деле,с плюсом, пока вы инициализируете index массив.

 def answer():  list = [312198.0, 306400.0, 270345.0, 367979.0, 375502.0]  seq = sorted(list)  index = [seq.index(v)   1 for v in list]  print(index)  

Комментарии:

1. и у вас есть ошибка компиляции в вашем коде при сортировке, я предполагаю, что вы сортируете исходный массив, а не неизвестную переменную, называемую x

2. Действительно, я сортирую исходный массив, однако я понял, что задал вопрос наоборот. Мне нужно отсортировать его таким образом, чтобы самая высокая стоимость имела значение 1, а самая низкая-5.

3. Не используйте список в качестве имени переменной, это затеняет (и вызывает путаницу у читателя) встроенный список

Ответ №2:

Вы можете отсортировать индексы в порядке убывания значений и присвоить значение ранга в позиции отсортированного индекса:

 L=[312198.0, 306400.0, 270345.0, 367979.0, 375502.0]  ranks = list(range(len(L))) for r,i in enumerate(sorted(ranks,key=lambda i:L[i],reverse=True),1):  ranks[i]=r  print(ranks) [3, 4, 5, 2, 1]  

Вы также могли бы сделать это более кратко (но менее эффективно), используя понимание списка, в котором вы подсчитываете количество элементов, превышающих каждое значение:

 ranks = [1 sum(item gt; value for item in L) for value in L]   

Первое решение-O(NlogN), а второе-O(N^2)

Также обратите внимание, что 1-е решение даст разные ранги равным значениям, но второе даст им одинаковый ранг