可以說我有:如何根據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