Aller au contenu

Les listes

Objectifs de la section

2-3 Manipulation de tableaux et dictionnaires de données

Temps requis

40 minutes

Une liste de données permet de positionner plusieurs données dans une même variable. Elles sont utiles pour traiter des données multiples liées entre elles. Prenons l'exemple du calcul d'une moyenne : on peut définir une variable par donnée dans notre échantillon. Cependant, nous deviendrons rapidement limités si l'on doit traiter 100 données ou même 1000 données ! Une liste permettra de contenir et manipuler facilement un nombre très élevé de données.

Pour définir une liste, on place entre crochets carrés [ ] les valeurs que l'on sépare par des virgules. Sur plusieurs claviers, ils sont accessibles avec les touches Alt Car et celles à côté de la lettre P.

Définition d'une liste
valeurs = [1, 2, 4, 8, 12]

Accéder aux éléments d'une liste

Sections 8.1

Les éléments d'une liste sont numérotés avec un système appelé indice (en anglais index). Le premier élément d'une liste a l'indice 0 et le dernier à l'indice n-1 avec n le nombre d'éléments de la liste.

Accéder et modifier les éléments d'une liste
1
2
3
4
5
6
7
8
valeurs = [1, 2, 4, 8, 12]
print(valeurs)          # Affiche [1, 2, 4, 8, 12]

print(valeurs[0])       # Affiche 1
print(valeurs[3])       # Affiche 8
valeurs[2] = 5          # Remplace la valeur 4 par la valeur 5

print(valeurs)          # Affiche [1, 2, 5, 8, 12]

Pour connaître le nombre d'éléments dans une liste, il faut utiliser la fonction len qui retourne le nombre d'éléments de la liste passée en paramètres.

Longueur d'une liste
1
2
3
valeurs = [1, 2, 4, 8, 12]

print(len(valeurs))     # Affiche 5

Indices négatifs

On peut aussi utiliser des indices négatifs pour accéder aux éléments à partir de la fin de la liste.

Accéder et modifier les éléments d'une liste à partir de la fin
1
2
3
4
valeurs = [1, 2, 4, 8, 12]

print(valeurs[-1])      # Affiche 12
print(valeurs[-3])      # Affiche 4

Égalité de liste

On peut comparer deux listes avec l'opérateur d'égalité ==. Les listes sont égales que si tous les éléments aux mêmes positions sont égaux.

Parcourir une liste

Sections 8.4

Ce qui est intéressant avec une liste est de traiter chacune de ces valeurs. Imaginons que l'on souhaite prendre la moyenne de la liste valeurs. Il ne serait pas très intéressant de lister les indices un à la fois... On peut plutôt utiliser les boucles pour itérer dans un tableau.

Parcourir une liste avec les indices
valeurs = [1, 2, 4, 8, 12]

# Afficher toutes les valeurs
for i in range(len(valeurs)):
    print (valeurs[i])

# Calculer la moyenne
moyenne = 0
for i in range(len(valeurs)):
    moyenne += valeurs[i]

moyenne /= len(valeurs)
print(f"La moyenne est {moyenne}")

Opérateur d'appartenance

Pour tester si un élément appartient dans une liste, on utilise l'opérateur in. L'opérateur retourne True si l'élément est dans la liste, False sinon.

Ajouter des éléments dans une liste
1
2
3
4
valeurs = [1, 2, 4, 8, 12]

print(4 in valeurs)  # Affiche True
print(0 in valeurs)  # Affiche False

On peut utiliser la boucle for pour parcourir directement les éléments d'une liste en utilisant l'opérateur in sur la liste plutôt que sur la liste des indices.

Parcourir une liste avec les valeurs
valeurs = [1, 2, 4, 8, 12]

# Afficher toutes les valeurs
for valeur in valeurs:
    print (valeur)

# Calculer la moyenne
moyenne = 0
for valeur in valeurs:
    moyenne += valeur

moyenne /= len(valeurs)
print(f"La moyenne est {moyenne}")

Manipuler une liste existante

Diverses fonctions permettent de modifier la structure d'une liste existante, soit en ajoutant, en retirant des éléments ou en triant les données. Il est aussi possible de rechercher la présence de certaines valeurs dans une liste.

Ajouter des éléments

Sections 8.3

On peut ajouter des éléments dans une liste de trois façons différentes :

  • Ajouter un élément en fin de liste avec la fonction append;
  • Insérer un élément à une position déterminée dans une liste avec la fonction insert;
  • Fusionner deux listes avec la fonction extend.
Ajouter des éléments dans une liste
valeurs = [1, 2, 4, 8, 12]

# Ajoute des éléments en fin de liste 
valeurs.append(5)
print(valeurs)      # [1, 2, 4, 8, 12, 5]

# Ajoute un élément à l'indice 2
valeurs.insert(2, 7)
print(valeurs)      # [1, 2, 7, 4, 8, 12, 5]

# Ajouter la liste [10, 10, 10]
liste2 = [10, 10, 10]
valeurs.extend(liste2)
print(valeurs)      # [1, 2, 7, 4, 8, 12, 5, 10, 10, 10]

Exemple de problème avec l'ajout d'éléments dans un tableau

Peupler une liste avec des entrées utilisateur
# Demander le nom des personnes d'une équipe de travail
equipe = [] # Création d'une liste vide

nom_saisi = "Non vide"

while nom_saisi != "":
    nom_saisi = input("Quel est le nom de la personne [retour pour arrêter] : ")

    if nom_saisi != "":
        equipe.append(nom_saisi)

print(f"L'équipe est : {equipe}")

Retirer des éléments

Sections 9.3

Pour retirer des éléments dans une liste, on peut utiliser trois façons différentes de le faire :

  • Retirer un élément par son indice avec la fonction pop;
  • Retirer un élément par sa valeur avec la fonction remove;
  • Retirer tous les éléments d'une liste avec la fonction clear
Retirer des éléments dans une liste
valeurs = [1, 2, 4, 8, 12]

# Retire l'élément à l'indice 3
valeurs.pop(3)
print(valeurs)      # [1, 2, 4, 12]

# Retire l'élément 12
valeurs.remove(12)
print(valeurs)      # [1, 2, 4]

# Retire tous les éléments de la liste
valeurs.clear()
print(valeurs)      # []

Exemple de problème avec le retrait d'éléments dans un tableau

Afficher les nombres en ordre décroissant
1
2
3
4
5
6
7
# Afficher les nombres en ordre décroissant
liste = [2, 7, 4, 6, 9]

while len(liste) > 0:
    valeur_maximale = max(liste)
    print(valeur_maximale)
    liste.remove(valeur_maximale)

Trouver un élément dans une liste

Sections 9.2

Pour trouver un élément dans une liste, on peut procéder de deux façons :

  • Trouver l'indice du premier élément qui possède la valeur avec la fonction index;
  • Compter le nombre d'occurrences d'un élément avec la fonction count.
Trouver et compter des éléments dans une liste
valeurs = [1, 2, 3, 3, 3, 3, 8, 4]

indice_2 = valeurs.index(2)
print(f"L'indice du premier 2 est {indice_2}.")     # Affiche 1

indice_3 = valeurs.index(3)
print(f"L'indice du premier 3 est {indice_3}.")     # Affiche 2

nombre_3 = valeurs.count(3)
print(f"Il y a {nombre_3} fois la valeur 3.")       # Affiche 4

nombre_18 = valeurs.count(18)
print(f"Il y a {nombre_18} fois la valeur 18.")     # Affiche 0

L'index d'un élément qui n'existe pas

Si un élément n'existe pas, une exception est levée, un message en rouge s'affiche dans la console et l'exécution de votre programme est suspendue.

Exemple de problème avec la recherche d'éléments

Vérifier la proportion de bases nucléiques dans un fragment d'ADN
1
2
3
4
5
6
sequence_adn = ["A", "T", "C", "A", "A", "G", "T", "C", "A", "A"]

# On souhaite connaître la proportion de chaque base nucléique
frequence_a = sequence_adn.count("A") / len(sequence_adn)
frequence_a_pourcentage = round(frequence_a * 100, 2)
print(f"%A : {frequence_a_pourcentage}")

Trier et inverser les éléments d'une liste

Il existe deux méthodes pour changer l'ordre des éléments dans une liste :

  • Les trier en ordre croissant avec la fonction sort.
  • Inverser l'ordre des éléments avec la fonction reverse.
  • Inverser deux éléments avec les indices.

Les autres types de changements demandent de

Trier et inverser les éléments dans une liste
# Tri en ordre croissant
valeurs = [1, 4, 2, 9, 3]
valeurs.sort()
print(valeurs)      # Affiche [1, 2, 3, 4, 9]

# Inversion des éléments
valeurs = [1, 4, 2, 9, 3]
valeurs.reverse()
print(valeurs)      # Affiche [3, 9, 2, 4, 1]

# Inversion de deux éléments avec leurs indices
valeurs = [1, 4, 2, 9, 3]
valeurs[0], valeurs[2] = valeurs[2], valeurs[0]
print(valeurs)      # Affiche [2, 4, 1, 9, 3]

Exemple de problème avec la recherche d'éléments

Trouver la médiane
1
2
3
4
5
valeurs = [1 , 4, 2, 2, 7, 9, 16, 12, 2]

# Trier le tableau en ordre croissant et extraire la donnée du centre
valeurs.sort()
print(valeurs[(len(valeurs) + 1) / 2])

Exercices

Page 147 et suivantes

Recommandés : 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8 (sans utiliser la fonction index), 8.12, 8.14 (sans utiliser la fonction sum), 8.15, 8.18, 8.24, 8.25
Supplémentaires : 8.9, 8.11 (sans utiliser la fonction extend), 8.13 (sans utiliser la fonction count), 8.16 (sans utiliser la fonction inverse), 8.21, 8.23

Page 173 et suivantes

Recommandés : 9.4, 9.5, 9.6, 9.7, 9.9, 9.10, 9.11 a et b, 9.19, 9.20
Supplémentaires : 9.11 a et b, 9.12, 9.17