Чтобы отсортировать список в Python с сохранением исходных индексов, вы можете использовать различные методы. Вот несколько подходов:
- Перечисление и сортировка. Вы можете использовать функцию
enumerate()для сопоставления каждого элемента списка с его индексом. Затем вы можете отсортировать список по элементам, сохранив исходные индексы. Вот пример:
my_list = [5, 2, 7, 1]
sorted_list = sorted(enumerate(my_list), key=lambda x: x[1])
sorted_indices = [x[0] for x in sorted_list]
sorted_values = [x[1] for x in sorted_list]
print(sorted_list) # [(3, 1), (1, 2), (0, 5), (2, 7)]
print(sorted_indices) # [3, 1, 0, 2]
print(sorted_values) # [1, 2, 5, 7]
- Numpy argsort: если у вас установлена библиотека numpy, вы можете использовать функцию
argsort(), чтобы получить индексы, которые будут сортировать список. Вот пример:
import numpy as np
my_list = [5, 2, 7, 1]
sorted_indices = np.argsort(my_list)
sorted_values = np.array(my_list)[sorted_indices]
print(sorted_indices) # [3 1 0 2]
print(sorted_values) # [1 2 5 7]
- Сжатие и сортировка. Другой метод — объединить элементы списка и их индексы, а затем отсортировать заархивированные пары на основе элементов. Наконец, вы можете разделить индексы и значения на отдельные списки. Вот пример:
my_list = [5, 2, 7, 1]
zipped = list(zip(my_list, range(len(my_list))))
zipped.sort()
sorted_indices, sorted_values = zip(*zipped)
print(sorted_indices) # (1, 2, 5, 7)
print(sorted_values) # (3, 1, 0, 2)