D) Trier une table

sorted(tableau)
En Python, la fonction sorted(tableau) permet de trier un tableau. Elle en renvoie une copie


— Cette fonction dispose aussi :
* d’un argument nommé key permettant de précisez selon quel critère une liste doit être triée. La valeur du paramètre key devrait être une fonction qui prend un seul argument et renvoie une clef à utiliser à des fins de tri. Cette technique est rapide car la fonction clef est appelée exactement une seule fois pour chaque enregistrement en entrée.
* Un troisième argument reverse (un booléen) permet de préciser si on veut le résultat par ordre croissant (par défaut) ou décroissant (reverse=True).

Remarque : à distinguer de la procédure de tri des listes "List.sort()" qui va modifier la liste elle-même.


Exemple : tri_nom=sorted(table,key=nom,reverse=True)




Dans l'éditeur Python  créer un fichier et enregistrez-le en le nommant :  traitementD.py


# Dans l'éditeur Python
t=['c','a','14','2','1']
tri=sorted(t)
print(tri) # tri de caractères
print(t) # t n'est pas modifié


On vérifie la copie de liste, et la liste t non modifiée

# On obtient dans la console
['1', '14', '2', 'a', 'c']
['c', 'a', '14', '2', '1']



Questions

1) Qu'observe t-on dans le tri des chaînes de caractères ? des valeurs numériques ?

2) Extrait sujet E3C de NSI - Expliquer votre réponse

   Vérifier son tri avec python pour valider votre réponse.


3) Dans le tableau  notes.csv précédent, ajouter une colonne :

Nom

 Maths  

NSI

 Anglais

Option

Galois

 17  

14

 17

EPS

Gauss

 20  

12

 8

Latin

Euler

 19  

15

 13

Italien



On voudrait trier la table selon les noms par ordre alphabétique.


import csv
fichier=open("notes.csv", encoding='utf8')
table=list(csv.DictReader(fichier,delimiter=";"))
print(table)
fichier.close()



Exemple de tri par clé à réaliser
- créer une fonction qui va renvoyer la valeur de la clé ’Nom’ pour chaque ligne (du dictionnaire).
- passer la fonction en paramètre key du tri "sorted"

def nom(ligne):
    return ligne['Nom']


tri_nom=sorted(table,key=nom,reverse=True)
print("tri nom",tri_nom)


# On obtient dans la console : le reverse a réalisé le tri inverse
[OrderedDict([('Nom', 'Gauss'), ('Maths', '20'), ('NSI', '12'),('Anglais', '8 ')]),
OrderedDict([('Nom', 'Galois'), ('Maths', '17'), ('NSI', '14'),('Anglais', '17')]),
OrderedDict([('Nom', 'Euler'), ('Maths', '19'), ('NSI', '15'),('Anglais', '13')])]


Question
Effectuer un tri par ordre alphabétique du "nom de l'option facultative" de l'élève (Latin, ...)


Pour cela modifier les éléments dans la fonction et le tri trioptfac

def opt(ligne):
    return ligne[...] # attribut = clé du dictionnaire


trioptfac=sorted(table,key=...,...)


print("trioptfac",trioptfac)



Exemple pour vérification de la question 3

# On obtient dans la console 

[OrderedDict([('Nom', 'Galois'), ('Maths', '17'), ('NSI', '14'), ('Anglais', '17'), ('Option', 'EPS')]),

OrderedDict([('Nom', 'Euler'), ('Maths', '19'), ('NSI', '15'), ('Anglais', '13'), ('Option', 'Italien')]),

OrderedDict([('Nom', 'Gauss'), ('Maths', '20'), ('NSI', '12'), ('Anglais', '8'), ('Option', 'Latin')])]


Pour les cas suivants, transformer en "entier" les valeurs du dictionnaires (exemple : return int(ligne[...])

4. Effectuer un tri selon les notes croissantes en NSI. Créer la fonction et l'appel de tri correspondant trinsi
5. Effectuer un tri selon les notes décroissantes en Anglais. Créer la fonction et l'appel de tri correspondant trienglish

Créé avec HelpNDoc Personal Edition: Environnement de création d'aide complet