1

可以说我有:

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

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

谢谢!

4

4 回答 4

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.izipwhich 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']
于 2013-10-07T11:38:21.017 回答
0

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

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

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

刚记在心里。还没有测试过,但我认为应该这样做。

于 2013-10-07T11:42:14.147 回答
0

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

于 2013-10-07T11:42:19.680 回答
-1

这应该这样做:

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

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

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

于 2013-10-07T11:38:06.373 回答