> ***Contenu*** : Notions introduites : le type conteneur, avec les listes, les tuples, les p-uplets nommés, parcours de séquences.
> ***Compétences*** : Comprendre la différence entre une liste python et un tuple. Maîtriser la création de conteneurs sur Python. Savoir utiliser les p-uplets nommés.
Les types *conteneurs* comme les tuples ou les listes permettent de stocker des objets, et proposent des méthodes d'accès, de modification et d'itération sur ces mêmes objets.
Ici nous allons voir plusieurs types de conteneurs : les listes, les tuples et les p-uplets nommés. En apprenant à créer et à manipuler ces types d'objets, cela nous permettra de travailler sur un grand nombre de données de manière rapide et efficace.
Pour le moment, nous n'avons appris à travailler qu'avec un nombre limité de variables. Cependant, il peut arriver que vous deviez lire, stocker, traiter et enfin imprimer des dizaines, voire des centaines ou des milliers de valeurs de données. Comment accéder efficacement à ces données ?
Les éléments d'une liste peuvent être comparés à des éléments d'une séquence : chaque élément a une position précise dans le conteneur, comme nous l'avons vu pour les chaînes de caractères (*str*).
- On peut également supprimer la première occurence d'un élement à la valeur spécifiée avec le mot clé **remove**
```python
liste = [1, 2, 3, 2, 4, 5]
liste.remove(2)
print(liste)
[1,3,2,4,5]
```
- Pour en terminer avec la suppression d'élément, le mot clé ***pop*** permet de supprimer et de renvoyer l'élément à une position spécifique. Par défaut, il supprime et renvoie le dernier élément de la liste
- Attention : ce n'est pas parce que le tuple n'est pas mutable que ce qu'il contient ne l'est pas ! Exemple, un tuple peut contenir une liste :
```python
t = (1, 2, ['a', 'b'])
print(t)
(1, 2, ['a', 'b'])
t[2].append('c')
print(t)
(1, 2, ['a', 'b', 'c'])
```
- Le tuple lui-même reste le même (il contient toujours trois éléments et les deux premiers sont toujours 1 et 2), mais la liste à l'intérieur du tuple a été modifiée.
- C'est pourquoi on dit que les tuples peuvent "contenir" des éléments mutables.
------------
## Les p-uplets nommés (namedtuple)
Lorsqu'on utilise un tuple classique, on accède aux éléments par leur indice. Cela peut rendre le code difficile à lire, surtout quand le tuple contient plusieurs valeurs.
```python
# Tuple classique représentant un élève
eleve = ("Alice", 16, "1ère NSI")
print(eleve[0]) # Le prénom
print(eleve[1]) # L'âge
```
Les **p-uplets nommés** (ou *named tuples*) permettent d'accéder aux éléments par leur nom, tout en conservant les avantages des tuples (immutabilité, performance).
### Création d'un p-uplet nommé
Pour utiliser les p-uplets nommés, on importe `namedtuple` depuis le module `collections` :
```python
from collections import namedtuple
# On définit un nouveau type "Eleve" avec trois champs
- **Mutabilité** : La différence la plus marquante est que les listes sont mutables (c'est-à-dire qu'elles peuvent être modifiées après leur création) tandis que les tuples sont immuables (c'est-à-dire qu'ils ne peuvent pas être modifiés après leur création).
- **Utilisation** : En général, les listes sont utilisées lorsque vous avez une collection d'éléments qui peut changer dans le temps (par exemple, une liste de tous vos contacts, de vos pokemon préférés). Les tuples sont utilisés lorsque vous avez une collection d'éléments qui ne changera pas (par exemple, votre date de naissance, ou un ensemble de coordonnées géographiques).
- **Performance** : Les tuples peuvent être plus rapides à parcourir que les listes et occupent moins d'espace mémoire, car ils sont immuables. Cela peut avoir un impact significatif dans les programmes où la performance est critique.
<arel="license"href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><imgalt="Licence Creative Commons"style="border-width:0"src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"/></a><br/>Ce cours est mis à disposition selon les termes de la <arel="license"href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.