Bonjour,
Dans mon stage je dois, à un moment, ordonner des chaînes de caractères en fonction du premier caractère dans un ordre précis. Voici un exemple d’entré :
"RH001-548",
"AH004-485",
"AH001-785",
"RH007-225",
"KH001-254"
Et voici la sortie que je dois obtenir :
AH001-785
AH004-485
RH001-548
RH007-225
KH001-254
Le tri doit donc :
- Regrouper les premières lettres ensemble et dans le bon ordre ;
- Trier ces petits groupes par numéro qui suit (la deuxième lettre sera toujours la même et les trois nombres suivants sont uniques pour une première lettre, on ne peut pas avoir deux fois
001
pour la lettreA
.
Voici la fonction que j’ai imaginé :
def sort(list):
tmp = {}
res = []
order = ["A", "R", "K"]
for el in list:
if el[0] not in tmp:
tmp[el[0]] = []
tmp[el[0]].append(el)
for letter in order:
for el in sorted(tmp[letter]):
res.append(el)
return res
Ce qui m’embête avec ce code, c’est le nombre de boucles et de listes/dictionnaires créés juste pour effectuer ce tri (sachant qu’il peut y avoir 2000 à 3000 éléments à trier).
Je me demandais donc s’il y avait moyen de faire plus simple (en utilisant map
ou autre fonction un peu compliqué ) qui vous viendrait à l’esprit ?
Merci pour votre aide !
+0
-0