2014-11-09 6 views
-2

Примечание: Я понимаю, что это похоже на много вопросов, но подождите всего секунду и закончите чтение.Сортировать список по другому списку в Python без слияния

Есть ли способ сортировать список другим, где нам не нужно каким-то образом объединять списки?

items = ["a", "b", "c", "d", "e"] 
minutes_ago = [1, 3, 2, 5, 4] 

Результат должен быть, что items отсортирован по minutes_ago списка. Каков оптимизированный способ сделать это?

Я думал о каком-то sorted(items, key = lambda ...), но потом не мог себе представить, как его решить.

Out:

items = ["a", "c", "b", "e", "d"] 
+0

Почему вы не хотите, чтобы объединить их? (а затем разблокировать их после) – RemcoGerlich

+0

Причины эффективности. Я не могу поверить, что лучшее, что мы можем сделать в python, - это объединить списки. – PascalVKooten

+0

Ну, у вас должна быть * некоторая * структура данных, которая связывает элементы первого списка с элементами другого, который работает в алгоритме сортировки, который просто пытается сравнить элемент. Список кортежей - довольно естественный способ сделать это. – RemcoGerlich

ответ

3

Это самый простой способ, которым я могу думать:

In [1]: items = ["a", "b", "c", "d", "e"] 

In [2]: minutes_ago = [1, 3, 2, 5, 4] 

In [3]: [i for m, i in sorted(zip(minutes_ago, items))] 
Out[3]: ['a', 'c', 'b', 'e', 'd'] 
+0

Это то, о чем я думал. Старый шаблон decorate/sort/undecorate. – RemcoGerlich

+0

Я думаю, что застежка не технически объединяет их, поэтому да, это простой ответ. – PascalVKooten

Смежные вопросы