让我说我有:
list = ['apple','banana','pear','orange']
values = [3,1,2,4]
我需要根据“values”向量中的值来排序列表字符串。在MatLab中我会合并两个然后对矢量进行排序,但似乎我不能在这里做到这一点。有什么想法吗?
谢谢!
答案 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的回答绝对是最好的。