2013-07-12 175 views
2

我有一個對象列表,我想基於並行數組對它們進行排序。所以,當我操作數據列表時,我構建了一個並行數組(其中,列表中的每個條目都對應於原始列表中的條目)。然後(讓我們說的並行陣列寫滿數字)基於並行數組的python排序

list_a = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 
list_b = (4, 2, 5, 6, 1, 7, 3, 9, 0, 8) 

我想排序基於並行數組值對象的原始列表,以便原始列表以升序由數值排序其他陣列。有沒有辦法做到這一點內置到Python?

sort_a_by_b(list_a, list_b) 

預期的結果將是:

list_a_sorted_by_b = (8, 4, 1, 6, 0, 2, 3, 5, 9, 7) 
+0

順便說一句,你有什麼有元組,而不是列表或數組。 – geoffspear

回答

6
>>> list_a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> list_b = [4, 2, 5, 6, 1, 7, 3, 9, 0, 8] 
>>> 
>>> import operator 
>>> 
>>> [k for k, v in sorted(zip(list_a, list_b), key=operator.itemgetter(1))] 
[8, 4, 1, 6, 0, 2, 3, 5, 9, 7] 
+0

謝謝你的幫助。 – avorum

1

通話對象列表objects和其他列表sort_keys。如果您只能從objects[i]的值計算sort_keys[i],則甚至不需要構建sort_keys。您應該只是這樣做:

objects.sort(key=compute_sort_key_for_object) 

其中compute_sort_key_for_object是你用來計算sort_keys[i]objects[i]功能。它更快,更具可讀性。

如果處理計算sort_keys比較複雜,你要羅希特的回答是:

import operator 
[k for k, v in sorted(zip(objects, sort_keys), key=operator.itemgetter(1))]