Leçons du module (1/4)
Listes
Une liste est une séquence ordonnée et mutable d'éléments. C'est la structure
de données la plus utilisée en Python : vous en créez une avec [] et la modifiez
avec un ensemble de méthodes à mémoriser.
Créer une liste
vuota = []
numeri = [10, 20, 30]
mista = [1, "due", 3.0, True, None] # types différents : légal mais rareAccès par index et slice (tranche)
Les index commencent à 0. Les index négatifs comptent à partir de la droite :
parole = ["a", "b", "c", "d"]
parole[0] # 'a'
parole[-1] # 'd' (dernier)
parole[1:3] # ['b', 'c'] slice [start:stop]
parole[::-1] # ['d', 'c', 'b', 'a'] inverséUn slice ne lève jamais d'IndexError : s'il est hors limites, il renvoie une
sous-liste vide. L'accès direct comme parole[10], en revanche, lève une
exception.
Modifier une liste
nums = [1, 2, 3]
nums.append(4) # [1, 2, 3, 4] ajoute à la fin
nums.insert(0, 0) # [0, 1, 2, 3, 4] insère à la position
nums.extend([5, 6]) # [0, 1, 2, 3, 4, 5, 6] concatène
nums.pop() # 6 extrait le dernier
nums.pop(0) # 0 extrait le premier (plus lent : O(n))
nums.remove(3) # supprime la PREMIÈRE occurrence de 3
nums[1] = 99 # remplace par indexTri
Deux formes — il est important de les distinguer :
nums = [3, 1, 4, 1, 5, 9, 2, 6]
nums.sort() # MODIFIE nums in place, renvoie None
ordinati = sorted(nums) # renvoie une NOUVELLE liste, laisse nums inchangée
nums.sort(reverse=True)
sorted(nums, key=lambda n: -n) # tri par cléLongueur, appartenance, itération
len(nums) # combien d'éléments
3 in nums # True/False
for n in nums:
print(n)Copier une liste
a = b ne copie pas — cela crée simplement un second nom pour la même liste. Pour copier réellement :
copia = lista[:] # slice complet
copia = list(lista) # constructeur explicite
copia = lista.copy() # méthode(Toutes ces copies sont superficielles (shallow copies) — les éléments imbriqués restent partagés.)
Copier des listes : attention aux références
En Python, lorsque vous écrivez list_b = list_a, vous ne créez pas de copie : vous créez simplement une deuxième référence. Modifier list_b altérera également list_a. Pour créer une véritable copie indépendante, vous devez écrire list_b = list_a.copy() ou utiliser un slice complet : list_b = list_a[:].
À vous de jouer
Étant donné la liste `nums = [5, 2, 8, 1, 9, 3]`, construisez `first_three_sorted` avec les trois premiers nombres de nums triés par ordre croissant. Ne modifiez pas nums.
Afficher l'indice
nums[:3] sont les trois premiers, puis sorted(...).
Solution disponible après 3 tentatives
Exercice de révision
En partant de `words = ['ciao']`, ajoutez 'mondo' à la fin, puis insérez '!' au début. Évaluez `words`.
Afficher l'indice
append à la fin, insert(0, ...) au début.
Solution disponible après 3 tentatives
Défi supplémentaire
Étant donné la liste `items = [10, 20, 30, 40]`, utilisez le découpage (slicing) pour créer une nouvelle liste `reversed_items` contenant les mêmes éléments mais dans l'ordre inverse. Enfin, évaluez `reversed_items`.
Afficher l'indice
Le découpage avec un pas négatif est [::-1]. Assignez-le à reversed_items.
Solution disponible après 3 tentatives