Отсортировать строку с сохранением исходных индексов
Есть строка:
str = [200, 322, 12, 877, 392, 142, 406]
Как ее можно отсортировать с последующим сохранением индексов?
Желательно, наиболее быстрым вариантом. То есть, чтобы элемент 12, который после сортировки будет стоять на 1 месте, имел индекс 2, а не 0.
Возможно есть способ сделать это через словарь или добавить доп. список с индексами.
Ответы (1 шт):
Как вариант могу предложить создание структур {'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
Вообще, конечно мне сложно представить ситуацию когда о сотрудниках известно только их порядковый номер и зп, и к тому же этих сотрудников столько, что скорость поиска по ним может быть существенна. Но возможно где-то так и есть. Иначе, я бы предложил использовать все же ООП подход, хотя, в рамках представленного вопроса это излишне.