2010-04-01 7 views
1

j'ai 3 listes, chacun avec des éléments égaux: les adresses électroniques, les salaires et les IDComment trier une liste par ordre alphabétique et ont des listes supplémentaires classées dans le même ordre

Je voudrais trier les adresses e-mail par ordre alphabétique et en quelque sorte Trier les 2 autres listes (salaires et cartes d'identité).

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

Salaries: 
50000 
60000 

IDs: 
2 
1 

Le puzzle: Je voudrais trier des emails tels que [email protected] est d'abord et [email protected] est le dernier et salaires est alors 60000 et ID est 50000 1 puis 2.

Détail supplémentaire:
1. La longueur des listes est la même et peut être plus longue que deux éléments.
2. Je transmettrai ensuite des ID aux fonctions pour récupérer d'autres listes. Ces listes n'auront pas besoin d'être triées puisqu'elles adopteront l'ordre de la liste des identifiants.

+1

Votre vrai problème est plus en amont. Vous devriez utiliser une structure de données (tuple, tuple nommé, objet) qui lie plus étroitement les salaires et les identifiants des adresses e-mail. –

Répondre

0

Si l'on suppose que chaque e-mail ID est unique, cela fonctionnera:

sortedEmails = emails[:] 
sortedEmails.sort() 

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

espoir qui aide

+0

-1 O (N ** 2) car list.index est O (N) –

3

Ceci est essentiellement la solution de EBO, faite à un -liner avec l'utilisateur de sorted() plutôt que list.sort, et plusieurs lvalues ​​dans l'assignation pour obtenir la liste individuelle (nommée comme l'original mais avec un préfixe s_) 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

très bon pour garder les listes séparées. – KronoS

Questions connexes