Tableaux et tuples
Tableaux redimensionnables¶
Le type de base permettant de représenter les tableaux en python est le type list
. En fait, cela correspond plus précisément à la notion de tableau redimensionnable (on peut modifier la taille du tableau dynamiquement après la création de celui-ci). Quand on parle de "liste en python" on fait référence au type list
.
Les objets de type list
sont des objets mutables.
Définitions par extension et indices¶
On définit un tableau en utilisant des crochets (on appelle ce mode de définition "par extension" : on écrit tous les éléments les uns après les autres). La taille d'un tableau est le nombre d'éléments qui le composent. On dit que \(i \in \mathbb{N}\) est un indice compatible avec la taille du tableau si \(0 \leq i < n\), où \(n\) est la taille du tableau.
1 2 3 4 5 6 7 |
|
3
banane
chocolat
ananas
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
Input In [97], in <cell line: 7>()
5 print(tab[1])
6 print(tab[2])
----> 7 print(tab[3])
IndexError: list index out of range
Si \(i\in \mathbb{N}\) est négatif et vérifie \(-n \leq i < 0\), alors il correspond à l'élément d'indice \(i + n\) du tableau (c'est à dire qu'on accède aux éléments à partir de la fin).
1 2 3 4 |
|
ananas
chocolat
banane
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
Input In [98], in <cell line: 4>()
2 print(tab[-2])
3 print(tab[-3])
----> 4 print(tab[-4])
IndexError: list index out of range
Il est possible de modifier une ou plusieurs cases du tableau.
1 2 3 4 |
|
['pomme', 'ananas', 'chocolat']
Définition par compréhension¶
On peut également définir un tableau en compréhension : on décrit comment obtenir les éléments qui le composent à l'aide d'une expression (qu'il faut comprendre, donc).
1 2 3 4 |
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Il est possible de filtrer certains résultats dans une liste en compréhension à l'aide du mot-clé if
, après le mot-clé for
.
1 2 3 4 5 6 7 8 |
|
[0, 4, 16, 36, 64]
[0, 1, 2, 3, 4]
Il est possible de faire des cabrioles pythonesques à l'aide de l'opérateur de Walrus :=
.
1 2 3 |
|
[1, 9, 25, 49, 81]
Parcours d'un tableau¶
Parcours par indice¶
On peut parcourir les indices du tableau à l'aide du mot-clé range
.
1 2 3 |
|
0 banane
1 chocolat
2 ananas
Parcours par valeur¶
Lorsque les indices ne sont pas pertinents, on peut parcourir le tableau par valeur.
1 2 3 |
|
banane
chocolat
ananas
Parcours mixte¶
Il est possible de réaliser un parcours "mixte" à l'aide du mot-clé enumerate
. À chaque itération, e
est l'élément d'indice i
de tab
.
1 2 3 |
|
0 banane
1 chocolat
2 ananas
Affectation depuis un tableau¶
On peut affecter des variables directement depuis un tableau. Cela nécessite d'affecter autant de variables que d'éléments dans le tableau.
1 2 3 |
|
banane chocolat ananas
Méthodes du type list
¶
Méthode append
¶
La méthode append
ajoute l'élément x
à la fin du tableau. Elle modifie le tableau. Elle renvoie None
.
1 2 3 4 |
|
['banane', 'chocolat', 'ananas', 'cerise']
None
Méthode insert
¶
La méthode insert
ajoute l'élément x
à l'indice i
tableau. Elle modifie le tableau. Elle renvoie None
.
1 2 3 4 |
|
['banane', 'cerise', 'chocolat', 'ananas']
None
Méthode pop
¶
Par défaut, la méthode pop
supprime et renvoie le dernier élément du tableau. Si un entier optionnel lui est passé en paramètre, elle supprime et renvoie l'élément d'indice i
du tableau. Elle modifie le tableau. Elle renvoie None
.
1 2 3 4 5 |
|
banane ananas
['chocolat']
Méthode remove
¶
La méthode remove
supprime la première occurrence de l'élément x
dans le tableau. Elle modifie le tableau. Elle renvoie None
. Elle soulève une erreur si l'élément n'est pas présent dans le tableau
1 2 3 4 5 |
|
['chocolat', 'ananas', 'banane']
None
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Input In [110], in <cell line: 5>()
3 print(tab)
4 print(retour)
----> 5 tab.remove("fraise")
ValueError: list.remove(x): x not in list
Méthode index
¶
La méthode index
renvoie l'indice de la première occurrence de l'élément x
dans le tableau. Elle soulève une erreur si l'élément n'est pas présent dans le tableau
1 2 3 4 5 |
|
0 2
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Input In [111], in <cell line: 5>()
3 j = tab.index("ananas")
4 print(i, j)
----> 5 tab.index("fraise")
ValueError: 'fraise' is not in list
Méthode copy
¶
La méthode copy
renvoie une copie indépendante du tableau tab
. Elle est utile pour éviter le phénomène d'aliassage.
1 2 3 4 5 6 7 |
|
['kiwi', 'chocolat', 'ananas']
['kiwi', 'chocolat', 'ananas']
['banane', 'chocolat', 'ananas']
Remarque. On peut aussi utiliser l'instruction list
pour réaliser une copie indépendante.
1 2 3 4 5 6 7 |
|
['kiwi', 'chocolat', 'ananas']
['kiwi', 'chocolat', 'ananas']
['banane', 'chocolat', 'ananas']
Tuples¶
Les tuples sont très similaires aux tableaux, à la différence près qu'un objet de type tuple
est non mutable.
1 2 3 |
|
fraise
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [114], in <cell line: 3>()
1 liste = ("fraise", "banane", "chocolat")
2 print(liste[0])
----> 3 liste[1] = "mangue"
TypeError: 'tuple' object does not support item assignment
On peut convertir une liste en tuple et un tuple en liste.
1 2 3 4 5 |
|
['fraise', 'banane', 'chocolat'] <class 'list'>
('fraise', 'banane', 'chocolat') <class 'tuple'>