2015-07-24 1 views
0

В приведенной ниже функции мне нужно отсортировать «элементы» на основе списка «ранг», который вычисляется внутри функции. Но мне нужно сделать это на месте и не создавать другого объекта. Код ниже выполняет сортировку, но создает новую ссылку. Другими словами, идентификаторы (элементы) до и после различны.Сортировка списка в python in place

def collection_modifyitems(items): 
    # calculate 'rank' 
    print(id(items)) 
    items = [x for (y, x) in sorted(zip(test_rank, items), key=lambda s: s[0])] 
    print(id(items)) 

Как я могу это сделать без создания новой справки или сделать это на месте?

+1

'пунктов [:] = [х для (у, х) в отсортированный (zip (test_rank, items), key = lambda s: s [0])] '? –

ответ

4

Использование [:] (нарезка весь список), чтобы изменить значение старого списка вместо того, чтобы создать новую ссылку:

items[:] = [x for (y, x) in sorted(zip(test_rank, items), key=lambda s: s[0])] 
+0

Большое спасибо @Mauris. Так оно и было. – MrAliB

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