2016-01-22 42 views
0

我在尋找簡單的方法來一次對2個列表進行排序。我需要按字母排序包含字符串的第一個列表,同樣的方法排序包含整數的第二個列表。列表數據是相關的(第一個[1]與第二個[1] ...有關)。所以我需要爲這兩個列表中具有相同索引的對保留相同的索引。 例如:排序2列表

first = ["B","C","D","A"] 
second = [2,3,4,1] 

我想這樣的排序是:

first = ["A","B","C","D"] 
second = [1,2,3,4] 

我不知道,如果是它甚至有可能做到這一點簡單的方法。

+0

頂端回答看起來不錯,但它聽起來像你應該使用的元組甚至更好熊貓數據幀。 – Narek

回答

2

您可以zip()它們,進行排序,然後解壓縮(雖然我不完全瞭解使用情況):

>>> first = ["B","C","D","A"] 
>>> second = [2,3,4,1] 
>>> 
>>> zip(first, second) 
[('B', 2), ('C', 3), ('D', 4), ('A', 1)] 
>>> first_new, second_new = zip(*sorted(zip(first, second))) 
>>> first_new 
('A', 'B', 'C', 'D') 
>>> second_new 
(1, 2, 3, 4) 
0

嘗試使用元組 訪問wiki.python.org 例如:

>>> student_tuples = [ 
     ('john', 'A', 15), 
     ('jane', 'B', 12), 
     ('dave', 'B', 10), 
] 
>>> sorted(student_tuples, key=lambda student: student[2]) # sort by age 

輸出

[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 
0

或者你可以使用類型的字典:

>>> d = {"B":2,"C":3,"D":4,"A":1} 
>>> sorted(d) 
['A', 'B', 'C', 'D'] 
>>> d["A"] 
1 
>>> d["C"] 
3 
>>> for i in sorted(d): 
    print(d[i]) 

1 
2 
3 
4