2010-04-01 95 views
1

我有3個表,每個相等的元素:電子郵件地址,工資和ID如何按字母順序排序列表,並在同一順序進行排序額外列出

我想的電子郵件地址和按字母順序排序以某種方式對其他2個列表(工資和ID)進行排序。

E.g., 
Emails: 
[email protected] 
[email protected] 

Salaries: 
50000 
60000 

IDs: 
2 
1 

拼圖: 我想的電子郵件進行排序,從而[email protected]是第一和[email protected]是最後的薪金是60000,然後50000和ID是1,那麼2

附加詳細信息:
1.列表長度相同,可以比兩個元素長。
2.我將隨後將ID傳遞給函數以檢索更多列表。那些列表將不需要排序,因爲它們將採用 ID列表的順序。

+1

你真正的問題是在上游。您應該使用更緊密地綁定電子郵件地址工資和ID的數據結構(元組,命名元組,對象)。 – 2010-04-01 22:09:39

回答

0

假設每個電子郵件ID是唯一的,那麼這將工作:

sortedEmails = emails[:] 
sortedEmails.sort() 

sortedSalaries = [] 
for email in sortedEmails: 
    i = emails.index(email) 
    sortedSalaries.append(salaries[i]) 

希望幫助

+0

-1 O(N ** 2)因爲list.index是O(N) – 2010-04-01 22:11:13

3

這實質上是EBO的解決方案,在一個由-liner與sorted()而不是list.sort的用戶以及分配中的多個左值來獲取單個列表(以原始名稱命名,但前綴爲s_)dir ectly。

>>> email = ['[email protected]', '[email protected]'] 
>>> salaries = [50000, 60000] 
>>> ids = [2,1] 

>>> s_email, s_salaries, s_ids = zip(*sorted(zip(email, salaries, ids))) 

>>> s_email 
('[email protected]', '[email protected]') 
>>> s_salaries 
(60000, 50000) 
>>> s_ids 
(1, 2) 
>>> 
+0

非常適合保持列表分離。 – KronoS 2011-08-03 17:58:40