Trier une liste de tuples, bis☘
On dispose d'une liste de tuples de la forme (dossard, nom, prénom, année de naissance, (heure, minute, seconde)) où le temps correspond au temps réalisé lors d'une course.
coureurs = personnes = [ (1, 'Labrosse', 'Adam', 2000, (3,42,12)),
(8,'Gemlamorte', 'Adèle', 1985, (4,10,2)),
(9,'Auboisdormant', 'Abel', 2001,(3,50,3)),
(2,'Etpan', 'Ahmed', 1975, (4,10,2)),
(7,'Térieur', 'Alain', 1999, (3,42,12)),
(10,'Térieur', 'Alex', 1976, (3,42,12)),
(6,'Tanrien', 'Jean', 2010, (3,50,3)),
(3,'Ouzi', 'Jacques', 1950, (3,42,12)),
(14,'Gator','Ali',2001, (5,2, 1)),
(5,'Deuf', 'John', 2006, (3,0,12)),
(4,'Provist', 'Alain', 2011, (3,50,3)),
(12, 'Verserre','Annie',2001,(5,2, 1) ),
(11,'Dajeun','Bruno',1984, (5,2, 1)),
(13,'Ainé','Ali',1975, (3,4,0)),
(15, 'Verse','Alain',1970, (5,2, 1)),
(16,'Ception','Alex',2001, (3, 16, 34))
]
Tri suivant les noms☘
Trier la liste suivant les noms des coureurs.
Solution
def get_nom(coureur):
"""
coureur est un tuple (dossard, nom, prénom, année de naissance, (heure, minute, seconde))
renvoie le nom
"""
return coureur[1]
def tri_suivant_nom(tab):
"""
tab: une liste de coureurs
trie la liste suivant l'ordre croissant alphabétique des noms
"""
tab.sort(key=get_nom)
Utilisation:
coureurs = personnes = [ (1, 'Labrosse', 'Adam', 2000, (3,42,12)),
(8,'Gemlamorte', 'Adèle', 1985, (4,10,2)),
(9,'Auboisdormant', 'Abel', 2001,(3,50,3)),
(2,'Etpan', 'Ahmed', 1975, (4,10,2)),
(7,'Térieur', 'Alain', 1999, (3,42,12)),
(10,'Térieur', 'Alex', 1976, (3,42,12)),
(6,'Tanrien', 'Jean', 2010, (3,50,3)),
(3,'Ouzi', 'Jacques', 1950, (3,42,12)),
(14,'Gator','Ali',2001, (5,2, 1)),
(5,'Deuf', 'John', 2006, (3,0,12)),
(4,'Provist', 'Alain', 2011, (3,50,3)),
(12, 'Verserre','Annie',2001,(5,2, 1) ),
(11,'Dajeun','Bruno',1984, (5,2, 1)),
(13,'Ainé','Ali',1975, (3,4,0)),
(15, 'Verse','Alain',1970, (5,2, 1)),
(16,'Ception','Alex',2001, (3, 16, 34))
]
tri_suivant_nom(coureurs)
Tri suivant les prénoms☘
Trier la liste suivant les prénoms (ordre croissant). Et des personnes ayant le même prénom apparaîtront dans l'ordre décroissant de leur numéro de dossard.
Solution
def get_prenom(coureur):
"""
coureur est un tuple (dossard, nom, prénom, année de naissance, (heure, minute, seconde))
renvoie le nom
"""
return coureur[2]
def get_dossard(coureur):
"""
coureur est un tuple (dossard, nom, prénom, année de naissance, (heure, minute, seconde))
renvoie le dossard
"""
return coureur[0]
def tri(tab):
"""
tab: une liste de coureurs
trie la liste suivant prénoms. A mêmes prénoms, tri suivant dossard décroissant.
"""
tab.sort(key=get_dossard, reverse=True)
tab.sort(key=get_prenom)
Tri suivant le temps☘
Trier la liste dans l'ordre croissant des temps réalisés. Des personnes ayant réalisé le même temps seront triées dans l'ordre décroissant des âges.
Solution
def get_temps(coureur):
"""
coureur est un tuple (dossard, nom, prénom, année de naissance, (heure, minute, seconde))
renvoie le temps réalisé en seconde
"""
temps = coureur[4]
return temps[0]*3600 + temps[1]*60 + temps[2]
def get_annee_naissance(coureur):
"""
coureur est un tuple (dossard, nom, prénom, année de naissance, (heure, minute, seconde))
renvoie l
"""
return coureur[3]
def tri(tab):
"""
tab: une liste de coureurs
trie la liste suivant temps. A mêmes temps, tri suivant âge décroissant.
"""
# ordre croissant des années de naissance = ordre décroissant des âges:
tab.sort(key=get_annee_naissance)
# ordre croissant des temps:
tab.sort(key=get_temps)