可以说我有:
list = ['apple','banana','pear','orange']
values = [3,1,2,4]
我需要根据“值”向量中的值对列表字符串进行排序。在 MatLab 中,我会将两者合并然后对向量进行排序,但我似乎无法在这里做到这一点。有任何想法吗?
谢谢!
这可能对你有用。使用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
which is like 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']
尝试使用 numpy argsort。将列表和值更改为 numpy 数组
list = np.asarray( list )
values = np.asarray( values )
idxs = np.argsort(values)
list = list[:,idxs]
刚记在心里。还没有测试过,但我认为应该这样做。
最好使用 Dict 对象,如果存在键值对,则使用易于处理的 dict....
这应该这样做:
[i[1] for i in sorted(enumerate(list), key=lambda (ix, _): values[ix])]
给
['banana', 'pear', 'apple', 'orange']
编辑: jabaldonedo 的答案绝对是最好的。