2015-05-15 2 views
1

Я хочу отсортировать список python из определенного индекса. Вот чего я хочу достичь. Рассмотрим список al = [1,2,4,3] Теперь то, что я хочу сделать это, начиная с последнего индекса, вернуться назад и поменять число, которое меньше последнего индекса, то есть 2, который имеет индекс 1. теперь мой список [1,3,4,2]Список сортировки из определенного значения индекса в python

Но после обмена я хочу отсортировать под-список после индекса обмена. вместо [1,3,4,2] Я хочу добраться до [1,3,2,4] Есть ли какой-либо способ в python только сортировать суб-список? Прямо сейчас, если я использую метод сортировки для определенного индекса, например: al[2:].sort() Он создает новый список вместо того, чтобы изменять его.

ответ

5

Вы можете использовать sorted() по кусочку, а затем присвоить результат обратно в срезе:

al[2:] = sorted(al[2:]) 
+0

Хорошо, так что нет никакой другой функции, как list.sort() для сортировки списка без задания? –

+0

@EkwinderSaini: Не с общим списком. Но если данные, над которыми вы работаете, могут входить в байты (то есть 0-255), вы можете использовать [memoryview] (https://docs.python.org/3/library/stdtypes.html#memoryview) на ByteArray. Но, вероятно, не так много, если ваша коллекция не будет огромной. Аргумент slice списка для 'sorted()', созданный кодом NPE, является временным и будет быстро собираться с мусором. –

0

Если вы хотите сделать это Inplace и в зависимости от того, что у вас есть в списках, вы можете использовать NumPy где basic indexing использованием всегда возвращает view исходного массива:

import numpy as np 

al = np.array([1, 2, 4, 3]) 

n = np.where(al < al[-1])[0][-1] 
al[n], al[-1] = al[-1], al[n] 
al[n+1:].sort() 

print(al) 
[1 3 2 4] 
Смежные вопросы