2013-10-07 47 views
1

可以說我有:如何根據python中的數組值排序列表?

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

我根據自己的需要,在「值」矢量值命令列表中的字符串。在MatLab中,我將兩者合併,然後對矢量進行排序,但似乎我不能在這裏做到這一點。有任何想法嗎?

謝謝!

+0

什麼是預期的輸出? – TerryA

+0

不要命名變量'list'。你會後悔的。 – geoffspear

+0

是的,我只是把這裏作爲一個例子。 – marc

回答

10

這可以爲你工作。使用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'] 
+0

zip是我失蹤的功能!謝謝! – marc

+0

歡迎您,查看關於'izip'的最新更新,並記住在SO中說謝謝的最佳方式是通過upvoting /接受答案;) – jabaldonedo

-1

這應做到:

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

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

編輯: jabaldonedo的答案肯定是最好的之一。

0

嘗試使用numpy的argsort。將列表和值更改爲numpy陣列

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

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

剛剛記住了它。沒有測試過,但我認爲應該這樣做。

0

最好使用字典對象,如果鍵值對目前使用的字典易於加工....

相關問題