2015-05-15 113 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)上使用字節組。但是,除非你的集合很龐大 - NPE代碼創建的'sorted()'的列表切片參數只是暫時的,並且會很快被垃圾收集。 –

0

如果你想做到這一點就地取決於你在你的名單是什麼,你可以使用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]