Отсортировать строку с сохранением исходных индексов

Есть строка:

str = [200, 322, 12, 877, 392, 142, 406]

Как ее можно отсортировать с последующим сохранением индексов?

Желательно, наиболее быстрым вариантом. То есть, чтобы элемент 12, который после сортировки будет стоять на 1 месте, имел индекс 2, а не 0.

Возможно есть способ сделать это через словарь или добавить доп. список с индексами.


Ответы (1 шт):

Автор решения: Daniil Loban

Как вариант могу предложить создание структур {'salary':x, 'id':i} с которыми потом и работать:

ranked_users = [200, 322, 12, 877, 392, 142, 406]

# добавляем id
users_details = [{'salary':x, 'id':i} 
  for i,x in enumerate(ranked_users)] 

# cортируем
users_details.sort(key=lambda x: x['salary'])

# делаем любой поиск
user_id = next((x['id'] 
  for x in users_details if x["salary"] == 12 ), None)

# результат 
print(user_id) # 2 

Вообще, конечно мне сложно представить ситуацию когда о сотрудниках известно только их порядковый номер и зп, и к тому же этих сотрудников столько, что скорость поиска по ним может быть существенна. Но возможно где-то так и есть. Иначе, я бы предложил использовать все же ООП подход, хотя, в рамках представленного вопроса это излишне.

→ Ссылка