Сортировать пронумерованный список по значению

MWE:

list1 = [2,5,46,23,9,78]
list1 = list(enumerate(list1))

Теперь предположим, что я хочу отсортировать этот список по индексу 1, то есть по исходному списку1, скажем, в порядке возрастания. Как я могу это сделать?

Я хотел бы что-то, что могло бы дать мне как индексы, так и значения.

list2 = sorted(list1[1], key=float)

person Euler_Salter    schedule 10.07.2017    source источник
comment
Если это вариант, рассмотрите возможность сортировки списка перед его перечислением: list(enumerate(sorted(list1))), если вы не собираетесь сохранять ссылку на исходный индекс, и в этом случае это не работает.   -  person Joshua Detwiler    schedule 10.07.2017


Ответы (3)


Сортировка по ключу item[1]:

>>> list2 = sorted(list1, key=lambda x:x[1])
>>> list2
[(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]
person Uriel    schedule 10.07.2017

Что-то вроде этого?

>>> from operator import itemgetter
>>> sorted(list1, key=itemgetter(1))
[(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]

Предоставляя функцию одного аргумента key, мы указываем сравнение ключ для элементов списка, используемых sorted. itemgetter — это хорошая функциональная оболочка для оператора получения элементов данных [i].

person randomir    schedule 10.07.2017

Вам нужно передать весь список (а не только первый элемент) и использовать лямбда-функцию для сортировки по значению - x[1].

>>> list1 = [2,5,46,23,9,78]
>>> list2 = list(enumerate(list1))
>>> list2
[(0, 2), (1, 5), (2, 46), (3, 23), (4, 9), (5, 78)]
>>> list3 = sorted(list2, key=lambda x: x[1])
>>> list3
[(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]
person Attie    schedule 10.07.2017