dans cette leçon, vous allez apprendre à utiliser deux structures de données fondamentales : les listes (modifiables) et les tuples (immuables).
objectifs
- créer des listes et tuples
- accéder aux éléments par index et slicing
- connaître les principales méthodes de liste
- comprendre la différence mutable / immuable
- itérer efficacement sur les éléments
listes : modifiables et dynamiques
création :
fruits = ["pomme", "banane", "cerise"]
vide = []
mix = [1, "a", True]
accès et modification :
fruits[0] # "pomme"
fruits[-1] # "cerise"
fruits[1] = "kiwi" # modifie l'élément
ajout et suppression :
fruits.append("mangue") # ajout en fin
fruits.insert(1, "fraise") # insérer à un index
fruits.extend(["ananas", "melon"]) # ajouter plusieurs
fruits.remove("kiwi") # supprime par valeur (ValueError si absent)
retire = fruits.pop() # retire et retourne le dernier
del fruits[0] # supprime par index
fruits.clear() # vide la liste
recherche et comptage :
n = [1, 2, 2, 3]
n.count(2) # 2
n.index(3) # 3 est à l'index 3 (ValueError si absent)
tri et inversion :
n.sort() # tri sur place
n.sort(reverse=True)
n.reverse() # inverse l'ordre sur place
copie :
copie1 = n.copy() # copie superficielle
copie2 = list(n) # idem
tuples : immuables et légers
création :
coord = (10, 20)
singleton = (42,) # virgule obligatoire pour tuple à un élément
vide = ()
accès :
coord[0] # 10
⚠ on ne peut pas modifier un tuple :
# coord[0] = 99 -> TypeError
utilité : données constantes, clés de dictionnaires, retour multiple de fonctions.
conversion liste ↔ tuple
list((1, 2)) # [1, 2]
tuple([1, 2]) # (1, 2)
itération sur listes et tuples
for fruit in fruits:
print(fruit)
for i, fruit in enumerate(fruits, start=1):
print(i, fruit)
mutabilité et effets de bord
a = [1, 2]
b = a
b.append(3)
print(a) # [1, 2, 3] → b et a pointent la même liste
pour copier indépendamment :
import copy
copie_totale = copy.deepcopy(a)
bonnes pratiques
- liste pour données modifiables, tuple pour constantes
- pour créer une liste vide, utilisez
[]plutôt quelist() - évitez de modifier une liste pendant que vous l’itérez (utilisez une copie)
mini exemples exécutables
# trier par longueur
mots = ["python", "c", "java"]
mots.sort(key=len)
print(mots)
# coordonnées x,y en tuple
def centre(largeur, hauteur):
return (largeur/2, hauteur/2)
x, y = centre(640, 480)
print(x, y)
# suppression conditionnelle
nums = [1, 2, 3, 4, 5]
nums = [n for n in nums if n % 2 == 0]
print(nums)
pièges courants
list * ncrée des références partagées :
l = [[0]] * 3
l[0][0] = 1
print(l) # [[1], [1], [1]]
- confusion entre tuple
(42)(juste un entier) et(42,)(tuple)
exercices
- créer une liste
coursesavec 3 éléments, ajouter un élément, trier, afficher. - créer un tuple
pointavec coordonnées x et y, afficherx. - écrire une fonction
pairs(seq)qui retourne une liste des éléments pairs deseq. - écrire
min_max(seq)qui retourne un tuple(min, max). - démontrer le piège
list * navec une liste de listes.