如何根据python中的数组值排序列表?

时间:2013-10-07 11:35:16

标签: python list vector

让我说我有:

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

我需要根据“values”向量中的值来排序列表字符串。在MatLab中我会合并两个然后对矢量进行排序,但似乎我不能在这里做到这一点。有什么想法吗?

谢谢!

4 个答案:

答案 0 :(得分:9)

这可能适合你。使用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']

答案 1 :(得分:0)

尝试使用numpy argsort。将列表和值更改为numpy数组

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

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

刚想到的。没有测试过这个,但我认为应该这样做。

答案 2 :(得分:0)

最好使用Dict对象,如果存在的键值对使用dict则很容易处理....

答案 3 :(得分:-1)

这应该这样做:

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

给出

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

编辑: jabaldonedo的回答绝对是最好的。