Aller au contenu

Les listes Python⚓︎

Définition

Les listes Python servent à stocker plusieurs données ensemble. Contrairement aux types simples comme les nombres ou les booléens qui ne permettent que d'associer une seule valeur à une variable, les types construits peuvent contenir plusieurs valeurs. Il existe d'autres types construits (dictionnaires, tableaux, arbres, files, piles, graphes...) qui seront vus cette année et en terminale.

Les listes sont un peu le couteau suisse de Python. Elles servent à faire beaucoup de choses. Bien plus qu'on appelle généralement liste dans d'autres langages ou en informatique en général.

Pour l'instant nous allons utiliser principalement la possibilité de rajouter des éléments à une liste et de parcourir les valeurs déjà ajoutées.

Les listes peuvent contenir n'importe quel autre type de données, y compris des listes, mais nous y reviendrons plus tard dans l'année. Parce que c'est souvent plus pratique, nous utiliserons des listes d'entiers, mais il ne faut pas imaginer que les listes se limitent à cela.

Création de listes

Les listes Python sont notées avec des crochets ([ et ]) et les valeurs sont séparées par des virgules. Par exemple [3, 5, -5, 1].

La liste vide se note juste [].

Pour ajouter un élément à une liste, il faut écrire LA_LISTE.append(LA_VALEUR).

>>> exemple = [4, 1, 9]
>>> exemple.append(7)
>>> exemple.append(10)
>>> exemple
[4, 1, 9, 7, 10]

Comme les textes, on peut également concaténer des listes entre elles :

>>> debut = [5, 1, -9]
>>> fin = [43, -9, 0, 15]
>>> debut + fin
[5, 1, -9, 43, -9, 0, 15]

⚠ Avec la concaténation, on obtient une nouvelle liste. Alors qu'avec append, on modifie la liste.

Pour faire plusieurs ajouts en une fois

Si on veut ajouter plusieurs valeurs à une liste sans faire plusieurs append, on peut utiliser extend.

>>> debut = [4, 9, 7]
>>> fin = [3, -1]
>>> debut.extend(fin)
>>> debut
[4, 9, 7, 3, -1]

Nous utiliserons peu cette méthode, mais pour certains projets, cela peut aider.

Pour connaître la longueur d'une liste, il faut utiliser la fonction len, comme pour les textes.

>>> len([])
0
>>> len([2, 1, 7, 9])
4
>>> une_liste = [4, 6, -2]
>>> une_liste.append(7)
>>> une_liste.append(15)
>>> len(une_liste)
5
Accéder aux valeurs des éléments

Chaque élément d'une liste est associé à un indice, comme pour les symboles dans un texte. Le premier élément a l'indice 0, le deuxième a l'indice 1 et ainsi de suite.

>>> liste_valeurs = [9, 10, -1, -45, 7]
>>> liste_valeurs[0]
9
>>> liste_valeurs[1]
10
>>> liste_valeurs[4]
7

Tout comme les textes, on peut utiliser des indices négatifs pour aller de droite à gauche. Le dernier élément a l'indice -1, l'avant-dernier -2 et ainsi de suite.

valeurs indices indices négatifs
9 0 -5
10 1 -4
-1 2 -3
-45 3 -2
7 4 -1

De façon général le dernier élément d'une liste a toujours pour indice len(liste)-1 et le premier a toujours comme indice négatif -len(liste).

Exercice 1 (exercice 1 de la feuille)
  1. On considère la liste valeurs = [2, 6, 14, 8, 0, -3].

    Déterminer les valeurs des expressions suivantes :

    1. valeurs[1]
    2. valeurs[5]
    3. valeurs[valeurs[0]]

    Vous pouvez utiliser le terminal ci-dessous pour tester vos réponses.

    Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)

  2. On considère les instructions suivantes :

    >>> liste1 = [3, 6, 1]
    >>> liste2 = [4, 5]
    

    Déterminer les valeurs des expressions suivantes :

    1. liste1+liste2
    2. liste2+liste1
    3. liste1+liste1
    4. liste2+liste2

    Vous pouvez utiliser le terminal ci-dessous pour tester vos réponses.

    Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)

  3. Que vaut donnees après les instructions suivantes :

    >>> donnees = [-8, 3, 2]
    >>> donnees.append(5)
    >>> donnees.append(9)
    

    Vous pouvez utiliser le terminal ci-dessous pour tester la réponse.

    Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)

Génération de listes⚓︎

Définition explicite

Nous avons déjà vu comment définir une liste en indiquant les valeurs qu'elle contient et aussi comment en ajouter.

Il est également possible de générer des listes à l'aide de formules :

>>> [0]  5
[0, 0, 0, 0, 0]
>>> [1, 2]  3
[1, 2, 1, 2, 1, 2]

On peut aussi obtenir des listes à partir de la fonction range ou d'un texte :

>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(3, 12, 2))  # on part de 3, de 2 en 2, en s'arrêtant avant 12
[3, 5, 7, 9, 11]
>>> list('bonjour')
['b', 'o', 'n', 'j', 'o', 'u', 'r']
Définition en compréhension

Il est également possible de générer des listes à l'aide de la syntaxe suivante :

Syntaxe de la définition en compréhension
[f(x) for x in ITERABLE]  # f est une fonction ou un expression qui utilise, ou pas, x.
>>> [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [x//2 for x in [3, 1, 7]]
[1, 0, 3]

On peut obtenir les mêmes listes à l'aide de boucles.

liste1 = []
for x in range(10):
    liste1.append(x**2)

liste2 = []
for x in [3, 1, 7]:
    liste2.append(x//2)

Pour obtenir des listes plus complexes, on peut rajouter une condition pour filtrer les valeurs :

Syntaxe de la définition en compréhension avec filtrage
[f(x) for x in ITERABLE if TEST]  # TEST est une expression booléenne qui utilise, ou pas, x.

On peut obtenir la liste des entiers inférieurs à 50 qui sont multiples de 3 mais pas de 4 :

>>> [x for x in range(50) if x%3 == 0 and x%4 != 0]
[3, 6, 9, 15, 18, 21, 27, 30, 33, 39, 42, 45]

Il faut utliser le script suivant pour obtenir la même liste :

liste = []
for x in range(50):
    if x%3 == 0 and x%4 != 0:
        liste.append(x)
Exercice 2 (exercice 2 de la feuille)

Déterminer la valeur des expressions suivantes :

  1. [i+1 for i in range(5)]
  2. [2*i for i in range(5)]
  3. [2*i for i in range(50) if i < 4]
  4. [i for i in range(10) if i%3 == 0]

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)