Aller au contenu

Leçon 6

Python, générer une liste

Vidéo 6 : Python, générer une liste · 3 min 49 s · sous-titres en français

Le cours écrit

Une liste est une série finie de valeurs numérotées. C'est la seule notion nouvelle d'algorithmique de l'année, et elle va très bien avec les suites.

6.1 Quelques rappels

Cette fonction calcule unu_n pour la suite de l'exemple 6.

def u(n):
    x = 3
    for k in range(n):
        x = 2 * x - 1
    return x
  • Le signe = est une affectation : x = 3 signifie que xx prend la valeur 33. Dans un algorithme écrit en français, on note x←3x \leftarrow 3.
  • La boucle for répète le calcul nn fois.
  • return renvoie le résultat. Ainsi, u(4) renvoie 3333.

6.2 En extension

Une liste s'écrit entre crochets, avec des virgules. Quand on écrit tous ses éléments, on la génère en extension.

L = [15, 23, 31, 39]

Chaque élément a un indice, et le premier indice est 00. Ainsi, L[0] vaut 1515 et L[3] vaut 3939. La fonction len donne le nombre d'éléments : len(L) vaut 44, et le dernier indice est 33.

6.3 Par ajouts successifs

On part d'une liste vide, et on ajoute les éléments un par un avec append.

L = []
for n in range(5):
    L.append(n**2)

La liste L contient alors 0,1,4,9,160, 1, 4, 9, 16.

C'est très pratique pour une suite définie par récurrence : L[k] est le terme de rang kk, et on calcule le terme suivant.

L = [3]
for k in range(4):
    L.append(2 * L[k] - 1)

La liste L contient alors 3,5,9,17,333, 5, 9, 17, 33.

6.4 En compréhension

La façon la plus courte est d'écrire, entre crochets, l'expression du terme suivie de for. On génère alors la liste en compréhension.

>>> [n**2 for n in range(5)]
[0, 1, 4, 9, 16]
>>> [15 + 8 * n for n in range(5)]
[15, 23, 31, 39, 47]

La première ligne se lit : « la liste des n2n^2, pour nn allant de 00 à 44 ». Ces mots viennent des ensembles : un ensemble est donné en extension quand on cite ses éléments, comme {1 ;4 ;9}\{1\,; 4\,; 9\}, et en compréhension quand on le décrit par une propriété, comme « les carrés des entiers de 11 à 33 ».

Cette écriture convient bien aux formules explicites.

6.5 Ajouter une condition

Avec if, seuls les éléments qui vérifient la condition sont gardés. Le symbole % donne le reste de la division : n % 3 == 0 signifie que nn est un multiple de 33.

>>> [n for n in range(20) if n % 3 == 0]
[0, 3, 6, 9, 12, 15, 18]
>>> [n for n in range(13) if n % 2 == 0 and n % 3 == 0]
[0, 6, 12]
>>> [n for n in range(13) if n % 2 == 0 or n % 3 == 0]
[0, 2, 3, 4, 6, 8, 9, 10, 12]

Le mot and traduit le « et » de la logique : les deux conditions sont vraies. Le mot or traduit le « ou » : au moins une des deux conditions est vraie, éventuellement les deux.

6.6 Deux pièges

  • range(5) donne 0,1,2,3,40, 1, 2, 3, 4 : cinq valeurs, mais pas le nombre 55. Plus généralement, range(n) donne les entiers de 00 à n−1n - 1.
  • Dans une liste de quatre éléments, les indices sont 00, 11, 22 et 33. Écrire L[4] provoque une erreur.
>>> L = [15, 23, 31, 39]
>>> L[4]
IndexError: list index out of range

Lire le cours complet du chapitre

Exercices 11 et 12

  • Exercice 11 : lire des listes
  • Exercice 12 : écrire des listes

Exercices du chapitre (PDF, 167 Ko)

Corrigés

Cherche d'abord les exercices sur ta feuille, puis compare avec le corrigé détaillé.

Corrigés du chapitre (PDF, 159 Ko)

Tu es hors connexion. Les chapitres téléchargés restent disponibles dans Hors connexion.