2013-10-07 37 views
1

可以说我有:如何根据python中的数组值排序列表?

list = ['apple','banana','pear','orange'] 
values = [3,1,2,4] 

我根据自己的需要,在“值”矢量值命令列表中的字符串。在MatLab中,我将两者合并,然后对矢量进行排序,但似乎我不能在这里做到这一点。有任何想法吗?

谢谢!

+0

什么是预期的输出? – TerryA

+0

不要命名变量'list'。你会后悔的。 – geoffspear

+0

是的,我只是把这里作为一个例子。 – marc

回答

10

这可以为你工作。使用zip对两个列表进行配对,然后进行排序,最后得到新列表。

>>> mylist = ['apple','banana','pear','orange'] 
>>> values = [3,1,2,4] 
>>> [i[1] for i in sorted(zip(values, mylist))] 
['banana', 'pear', 'apple', 'orange'] 

顺便说一句不使用list命名列表。

您还可以使用itertools.izip这就好比zip()只不过它返回一个迭代器,而不是一个列表,因此你可以得到更好的性能

>>> from itertools import izip 
>>> mylist = ['apple','banana','pear','orange'] 
>>> values = [3,1,2,4] 
>>> [i[1] for i in sorted(izip(values, mylist))] 
['banana', 'pear', 'apple', 'orange'] 
+0

zip是我失踪的功能!谢谢! – marc

+0

欢迎您,查看关于'izip'的最新更新,并记住在SO中说谢谢的最佳方式是通过upvoting /接受答案;) – jabaldonedo

-1

这应做到:

[i[1] for i in sorted(enumerate(list), key=lambda (ix, _): values[ix])] 

['banana', 'pear', 'apple', 'orange'] 

编辑: jabaldonedo的答案肯定是最好的之一。

0

尝试使用numpy的argsort。将列表和值更改为numpy阵列

list = np.asarray(list) 
values = np.asarray(values) 

idxs = np.argsort(values) 
list = list[:,idxs] 

刚刚记住了它。没有测试过,但我认为应该这样做。

0

最好使用字典对象,如果键值对目前使用的字典易于加工....

相关问题