Как сохранить исходный индекс после сортировки списка? - PullRequest
4 голосов
/ 01 апреля 2020

Допустим, у меня есть следующий массив:

a = [4,2,3,1,4]

Затем я сортирую его:

b = sorted(A) = [1,2,3,4,4]

Как я могу получить список, отображающий каждое число, например:

position(b,a) = [3,1,2,0,4]

для уточнения этого списка содержит позиции, а не значения)

(ps 'также с учетом того, что первые 4 были в позиции 0)

Ответы [ 2 ]

7 голосов
/ 01 апреля 2020
b = sorted(enumerate(a), key=lambda i: i[1])

В результате получается список кортежей, первый элемент которого является исходным индексом, а второй - значением:

[(3, 1), (1, 2), (2, 3), (0, 4), (4, 4)]
2 голосов
/ 01 апреля 2020
def position(a):
    return sorted(range(len(a)), key=lambda k: a[k])
...