2017-10-15 94 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