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'>