2017-10-15 138 views
-1

這裏是什麼,我想(的Python 3.6)的例子:鏈接列表和Python中的排序

List1= [1,2,3,4,5] #needed order 
List2=[5,4,3,2,1] #inputted order. 
List3=[25,20,15,10,5] #order inputed linked with list2 

以相同的順序與List3鏈接

List2爲了改變的List1預計輸出或從最小到最大。 List3也會改變。

所需的輸出:

List2=[1,2,3,4,5] #list change to correct order 
List3=[5,10,15,20,25] #list stayed in correct position linked with list2 
+0

你要找的argsort功能。 –

+0

您有任何鏈接或教程網頁嗎?還是一個示例程序? – GraphicsLab

+0

'argsort'是'numpy'包的一部分。 – chepner

回答

1

您正在尋找的argsort功能。在Python中,一個方式來實現,這將使用sorted + enumerate

>>> [List3[x] for x, _ in sorted(enumerate(List2), key=lambda x: x[1])] 
[5, 10, 15, 20, 25] 

隨着numpy,你可以用做到這一點:

>>> import numpy as np 
>>> np.array(List3)[np.argsort(List2)] 
array([ 5, 10, 15, 20, 25]) 
+0

嗨,有沒有辦法做到這一點,而無需下載和安裝包? – GraphicsLab

+0

@GraphicsLab第一種技術不需要任何軟件包。 –

+0

你有這樣的例子嗎? – GraphicsLab

1

這裏是另一種方法在純Python中執行:

您壓縮兩個列表,然後按第一個(默認)元素排序。

In [18]: List2=[5,4,3,2,1] 

In [19]: List3=[25,20,15,10,5] 

In [20]: [b for _, b in sorted(zip(List2, List3))] 
Out[20]: [5, 10, 15, 20, 25] 

如果您希望通過第二個元素進行排序,你會怎麼做:

result = [b for _, b in sorted(zip(List2, List3), key=lambda x: x[1])] 
+0

我會試試這個[20] – GraphicsLab

+0

@GraphicsLab,噢,我正在使用'ipython'交互式shell。 – Akavall

+0

好吧夥伴,所以我只是忘記了第一位,然後纔讀到: – GraphicsLab