undefined

Open Source Your Knowledge, Become a Contributor

Technology knowledge has to be shared and made accessible for free. Join the movement.

Create Content
Previous: Cours - Les listes Next: Manipulations de base

Cours sur les listes (Suite)

Liens entre listes et les parties précédentes du cours.

  • Lien avec la structure conditionnelle if... else... :
    Supposons que je retrouve des piles, je veux alors les retirer de ma liste de courses si je les avaient notées et que je viens de me rappeler que j'ai besoin d'une brosse car elle a encore disparue de la salle je vais donc la rajouter si elle n'y est pas déjà. Cela donnerait un code comme ceci :

    if  "piles" in ma_liste_de_courses:
        ma_liste_de_courses.remove("piles")
    if "brosse" not in ma_liste_de_courses :
        ma_liste_de_courses.append("brosse")
    
  • Lien avec la boucle for :

    • On peut énumérer les éléments d'une liste dans une boucle pour répéter des opérations pour chaque élément de la liste. Par exemple si je veux afficher les carrés des nombres d'une liste :

      liste_nombres = [1, 3, 7]
      for nombre in liste_nombres :
      print(nombre**2)
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    • Des fois, quand on énumère dans une boucle for, on a besoin à la fois de l'élément dans notre liste mais aussi de son indice.
      On peut utiliser la fonction enumerate et alors faire comme ceci :

      liste = [ 1, 4, 9, 3, 1, 2 ]
      for indice, element in enumerate(liste):
      print("Le nombre n°",indice, "est", element)
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • Lien avec les chaines de caractères :

    • texte.split(separateur) : Crée une liste des mots du texte qui sont compris entre les separateur. Si on met juste .split(), il prend comme séparateur un espace. Donnons des exemples pour clarifier :

      print("ab-cd-e/fg-h-ij kl".split( "-" ))
      print("Deux mots, un-autre-mot , Unmot".split())
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      Remarquez bien dans les deux exemples qu'il ne considère comme séparateur que ce qu'on lui donne comme séparateur entre parenthèse (un espace si on ne lui donne rien).

    • separateur.join(liste) : L'exact contraire de split(). Crée un texte à partir d'une liste de mots en intercalant entre chaque mot le separateur.

      print(" / ".join( ["Janvier", "Février", "Mars", "Avril" ]))
      print(" <=> ".join( [ "x² - 1 = 0", "x² = 1", "x = 1 ou x = -1"]))
      print("".join([ "3", ".", "1", "4", "1", "5", "9" ]))
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      On remarquera sur le dernier exemple qu'une chaine vide nous permet de coller tous les éléments de la liste.

Listes en compréhension

Une des forces de Python : la possibilité de créer une liste à partir d'autres en rajoutant des conditions à la volée et le tout en une ligne !
Donnons des exemples : Pour augmenter de 3 tous les éléments d'une liste de nombres :

ma_liste_de_nombres = [1, 2, 3, 4, 5]
print([ n + 3 for n in ma_liste_de_nombres ])
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Remarque : j'aurais pu mettre écrire directement [ n+3 for n in range(1,6)].

Si je veux la somme des carrés des entiers de 1 à 10, je peux par exemple faire :

print(sum( [ n**2 for n in range(1,11) ] ))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Si je veux les longueurs des mots d'une liste de mots :

ma_liste_de_mots = [ "Cosinus", "Sinus", "Tangente", "Cotangente" ]
print([ len(mot) for mot in ma_liste_de_mots])
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Et si pour cette même liste, je veux rajouter hyperbolique à chaque mot :

ma_liste_de_mots = [ "Cosinus", "Sinus", "Tangente", "Cotangente" ]
print([ mot +" hyperbolique" for mot in ma_liste_de_mots ])
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

On peut même rajouter des conditions : Si je veux la liste des carrés des nombres pairs inférieurs à 15 (je rappelle qu'un nombre n est pair si et seulement si n%2==0) :

print([ n**2 for n in range(16) if n%2==0])
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Si je veux récupérer la première lettre des mots d'une liste commençant par une voyelle :

ma_liste_de_mots= ["maths", "info", "python", "exposant", "alpha", "fonction", "parabole", "equilateral", "orthogonal", "cercle", "isocèle" ]
print([ mot[0] for mot in ma_liste_de_mots if mot[0] in "aeiouy"])
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Quelques explications rapides sur cet exemple : mot[0] récupère la première lettre de mot. Pour vérifier que c'est une voyelle, je vérifie qu'elle appartient à "aeiouy". Voir le cours sur les chaines de caractères.

Compléments : Problèmes de copies de listes

Quand on manipule souvent les listes, à un moment donné, on tombe sur le problème suivant :

ma_liste=[ 1, 2, 3]
sauvegarde= ma_liste
ma_liste[0]=4
print(sauvegarde)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Le problème ne saute peut-être pas aux yeux mais pourtant : J'ai une liste que je veux modifier mais avant je la sauvegarde (dans la variable sauvegarde). Puis je modifie le premier terme de ma liste d'origine et en affichant ma sauvegarde, je vois que ma sauvegarde est modifiée aussi !
Le problème vient du fait que ma liste d'origine est stockée quelque part et toutes les variables qui y font référence renvoient vers ce seul et même stockage. Donc si je modifie d'un coté, ca modifie pour tout le monde. Pour éviter ce problème, il suffit lors de la sauvegarde d'écrire sauvegarde= list(ma_liste) ou bien sauvegarde= ma_liste.copy(). Cela créera une vraie copie de notre liste qui sera sans lien avec celle d'origine.

Listes de listes :

Dans une liste, on peut mettre beaucoup de choses différentes et entre autre des listes ce qui est bien pratique si on veut stocker comme dans un tableau. Par exemple une grille de morpion pourrait s’écrire : grille = [["O", "X", "O"], ["O", "X", "X"], ["X", "O", "O"]] Pour récupérer l'élément de la deuxième ligne troisième colonne il suffit que j'écrive grille[1][2] car les listes commencent à 0 donc il faut penser à décaler d'un cran et de plus, grille[1] est la liste ["O", "X", "X"], c'est donc naturel que pour récupéré le troisième élément, on écrive grille[1][2]. Les listes de listes servent souvent à représenter un tableau mais on n'est pas obligé de s’arrêter à une profondeur de deux. On peut faire des listes de listes de listes...

QCM

Voici quelques QCM pour voir si vous avez bien compris. N'hésitez pas à relire ce qui précède si vous avez un doute.

QCM 1
liste = [ "T", "e", "x", "t", "e" ]
for i, c in enumerate(liste):
    print(i,c)
Que va afficher ce programme (Les "/" représentent des retours à la ligne ?

QCM 2
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(texte.split())
Que va afficher ce programme ?

QCM 3
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(texte.split("t"))
Que va afficher ce programme ?

QCM 4
liste = [ "06", "18", "54", "23", "34" ]
print(".".join(liste))
Que va afficher ce programme ?

QCM 5
liste = [ "06", "18", "54", "23", "34" ]
print("".join(liste))
Que va afficher ce programme ?

QCM 6
print([n**3 for n in range(5)])
Que va afficher ce programme ?

QCM 7
print(...)
Que faut-il mettre à la place des ... pour afficher la liste des carrés des entiers de 5 à 10 compris c'est à dire [25, 36, 49, 64, 81, 100] ?

QCM 8
liste=["maths", "info", "python", "exposants", "alpha", "fonctions", "parabole", "equilateral", "orthogonal", "cercles", "isocèle" ]
print(...)
Que faut-il mettre à la place des ... pour afficher la liste des mots de la liste donnée qui se terminent par un "s" ?

QCM 9
grille= [[1,2,3],[4,5,6],[7,8,9]]
print(grille[2][1])
Que va afficher ce programme ?
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content