可以说我有:如何根据python中的数组值排序列表?
list = ['apple','banana','pear','orange']
values = [3,1,2,4]
我根据自己的需要,在“值”矢量值命令列表中的字符串。在MatLab中,我将两者合并,然后对矢量进行排序,但似乎我不能在这里做到这一点。有任何想法吗?
谢谢!
可以说我有:如何根据python中的数组值排序列表?
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
这就好比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']
zip是我失踪的功能!谢谢! – marc
欢迎您,查看关于'izip'的最新更新,并记住在SO中说谢谢的最佳方式是通过upvoting /接受答案;) – jabaldonedo
这应做到:
[i[1] for i in sorted(enumerate(list), key=lambda (ix, _): values[ix])]
给
['banana', 'pear', 'apple', 'orange']
编辑: jabaldonedo的答案肯定是最好的之一。
尝试使用numpy的argsort。将列表和值更改为numpy阵列
list = np.asarray(list)
values = np.asarray(values)
idxs = np.argsort(values)
list = list[:,idxs]
刚刚记住了它。没有测试过,但我认为应该这样做。
最好使用字典对象,如果键值对目前使用的字典易于加工....
什么是预期的输出? – TerryA
不要命名变量'list'。你会后悔的。 – geoffspear
是的,我只是把这里作为一个例子。 – marc