Retour au cours

listes et tuples : création, accès, méthodes principales

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 que list()
  • é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 * n cré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

  1. créer une liste courses avec 3 éléments, ajouter un élément, trier, afficher.
  2. créer un tuple point avec coordonnées x et y, afficher x.
  3. écrire une fonction pairs(seq) qui retourne une liste des éléments pairs de seq.
  4. écrire min_max(seq) qui retourne un tuple (min, max).
  5. démontrer le piège list * n avec une liste de listes.