Listes en Python
Définition des listes en Python
Définition
Tableau: Un tableau est une collection ordonnée d'éléments de n'importe quel type, organisés séquentiellement les uns à la suite des autres.
Info
En Python, un tableau est appelé liste. Il est de type list
Le tableau est modifiable par affectation, on dit qu'il est mutable
Bases sur les listes en Python
Création d'une liste
Dans une liste, tous les termes doivent être séparés par des virgules et entourés de crochets
Exemple
L = [1, 5, 8]
Info
Une liste peut aussi contenir des éléments de types différents
lst = [4, "bonjour", False, [7, 9]]
liste vide
La liste vide est notée []
lst = [] # liste vide
Accès aux éléments d'une liste en Python
Accéder aux éléments d'une liste
On accède à un élément d'une liste en mettant entre crochets l'indice de l'élémént (qui commence à zéro).
Exemple
>>> famille = ["Bart", "Lisa", "Maggie"]
>>> famille[0]
'Bart'
>>> famille[1]
'Lisa'
>>> famille[2]
'Maggie'
Danger
Un indice qui dépasse la valeur longueur de la liste -1 provoquera une erreur list index out of range.
Exemple:
>>> famille = ["Bart", "Lisa", "Maggie"]
>>> famille[3] # Erreur de type list index out of range
IndexError: list index out of range
Indices négatifs
Il est possible d'utiliser des indices négatifs.
\(-1\) correspond alors au dernier élément de la liste.
Exemple d'utilisation d'indices négatifs
>>> famille = ["Bart", "Lisa", "Maggie"]
>>> famille[-1]
'Maggie'
>>> famille[-2]
'Lisa'
Modification d'une liste par affectation en Python
Modification d'une liste
Les termes d'une listes peuvent être modifiés par affectation au cours d'un programme.
Cela est possible car les listes sont des objets mutables.
Exemple de modification par affectation
>>> animaux = ['renards', 'crocodiles', 'zèbres']
>>> animaux[1] = 'toucans'
>>> print(animaux)
['renards', 'toucans', 'zèbres']
Longueur d'une liste en Python
Longueur d'une liste
La longueur d'une liste sera donnée par la fonction len()
Exemple
>>> lst = [3, 'bonjour', True, [1, 2, 5]]
>>> len(lst)
4
Test d'appartenance avec in en Python
Tester l'appartenance d'un élément dans une liste
On peut tester si un élément appartient à une liste avec in
Example de test d'appartenance
>>> lst = ['n', 's', 'i']
>>> print('n' in lst)
True
>>> print('b' in lst)
False
Opération sur les listes en Python
La méthode append()
Les listes Python ont la particularité de pouvoir être allongées d'un élément en fin de liste, grâce à la méthode append()
Example d'utilisation de la méthode append()
>>> felins = ['chats', 'tigres', 'léopards']
>>> felins.append('lions')
>>> print(felins)
['chats', 'tigres', 'léopards', 'lions']
La concaténation
Avec l'opérateur +, on peut concaténer deux listes, c'est-à-dire créer une nouvelle liste formée avec deux listes.
Exemple de concaténation
>>> lst1 = [3, 5, 7]
>>> lst2 = [12, 15, 9]
>>> lst3 = lst1 + lst2
>>> print(lst3)
[3, 5, 7, 12, 15, 9]
Multiplication par un entier
On peut utiliser la multiplication par un entier int pour dupliquer une liste.
Exemple de multiplication par un entier
>>> lst1 = [0]*5
>>> print(lst1)
[0, 0, 0, 0, 0]
>>> lst2 = ['t', 'u']*3
>>> print(lst2)
['t', 'u', 't', 'u', 't', 'u']
Le slicing en Python
Le slicing
Le découpage de liste (appelé slicing) permet d'extraire un séquence d'une liste.
Soit lst une liste
La syntaxe lst[i:j] permet d'extraire de la liste tous les éléments consécutifs compris entre l'élément de rang i inclus et l'élément de rang j exclus.
Exemples de slicing
>>> jours = ['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche']
## Les deux premiers jours de la semaine
>>> jours[0:2]
['lundi', 'mardi']
## On peut omettre le 0
>>> jours[:2]
['lundi', 'mardi']
## Du mardi au vendredi
>>> jours[1:5]
['mardi', 'mercredi', 'jeudi', 'vendredi']
## Du jeudi jusqu'à la fin
>>> jours[3:]
['jeudi', 'vendredi', 'samedi', 'dimanche']
## Tout sauf le dimanche
>>> jours[:-1]
['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']
Info
Dans le cas du slicing, il n'y a pas d'erreur d'indexation. Par exemple:
>>> lst = [1, 2, 3]
>>> lst[2021:]
[]
Liste en compréhension en Python
Info
Il est possible et élégant de construire une liste en compréhension avec le langage Python. C'est très pratique pour créer, transformer ou filtrer une liste.
Exemples de listes en compréhension
>>> nombres = [k for k in range(10)]
>>> nombres
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Il est bien sûr possible d'agir sur le paramètre :
>>> carres_parfaits = [k**2 for k in range(10)]
>>> carres_parfaits
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Filtrage
Ajouter une condition de filtrage permet de ne sélectionner que certains éléments de la liste.
Exemples de filtrages
>>> c = [n for n in carres_parfaits if n % 3 == 0]
>>> c
[0, 9, 36, 81]
Matrices: les listes de listes en Python
Création d'une liste de listes
Un tableau à double entrée, appelé matrice, peut être représenté par une liste de listes.
Exemples de matrices
| 7 | 9 |
|---|---|
| 5 | 2 |
L = [[7, 9], [5, 2]]
On peut aussi écrire sur plusieurs lignes pour plus de confort visuel:
L = [[7, 9],
[5, 2]]
Exemple du jeu de morpion
On peut représenter ce tableau par une liste de listes:
morpion = [['X', ' ', ' '], ['X', ' ', ' '], ['O', 'O', ' ']]
Bien sûr on peut mettre sur plusieurs lignes:
morpion = [['X', ' ', ' '],
['X', ' ', ' '],
['O', 'O', ' ']]
Convention sur les lignes et les colonnes
Par convention, les lignes sont notées avec l'indice \(i\) et les colonnes sont notées avec \(j\).
Exemples d'accès aux éléments des matrices
morpion[i][j] # ligne d'indice i, colonne d'indice j
morpion[0][0] # ligne 1, colonne 1
morpion[0][0] # 'X'
morpion[2][1] # 'O'
morpion[1][2] # ' '
On suppose que le joueur 'X' veuille empêcher le joueur 'O' de gagner:
morpion[2][2] = 'X'
# morpion = [['X', ' ', ' '],
# ['X', ' ', ' '],
# ['O', 'O', 'X']]
Matrices en compréhension
On peut générer des matrices en compréhension
Exemple de matrice en compréhension
>>> matrice = [[i+j for j in range(3)] for i in range(3)]
>>> matrice
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]