Explication de la leçon
Après cette leçon, tu seras capable de :
start:stop en te rappelant que stop est exclusif.[:] ou .copy() avant d'en modifier les éléments.Un découpage (slice) sélectionne plusieurs éléments sans avoir à indexer manuellement chacun d'eux. Avec items[start:stop], start est inclus et stop ne l'est pas. Par exemple, items[1:4] renvoie les éléments aux indices 1, 2 et 3.
Un découpage peut omettre l'une ou l'autre des bornes : items[:3] prend les trois premiers éléments, et items[2:] prend tout à partir de l'indice 2. Les bornes négatives comptent à partir de la fin, comme tu l'as pratiqué dans la leçon précédente. items[::2] prend un élément sur deux en utilisant un pas positif. Contrairement à l'indexation directe, un découpage dont la fin dépasse la longueur de la liste s'arrête simplement aux éléments disponibles.
Copier est essentiel lorsque les données sont modifiables. candidate = baseline ne crée pas une nouvelle liste ; les deux noms font référence au même objet. En revanche, candidate = baseline[:] ou candidate = baseline.copy() crée une nouvelle liste externe. Mettre à jour un élément de premier niveau dans la copie ne modifiera pas l'original.
Il s'agit de copies superficielles (shallow copies) : si la liste contient des objets imbriqués mutables, ces objets imbriqués restent partagés. Nous traiterons les structures plus profondes plus tard.
La position de fin n'est pas incluse.
stages = ["fetch", "build", "test", "package", "deploy"]
print(stages[1:4])Sortie :
['build', 'test', 'package']L'élément à l'indice 4 est exclu.
Omettre le début ou la fin permet de sélectionner facilement des éléments à l'une ou l'autre extrémité.
regions = ["eu", "us", "apac", "sa", "ca"]
print(regions[:2])
print(regions[-2:])Sortie :
['eu', 'us']
['sa', 'ca']Le début négatif sélectionne les deux derniers éléments.
Une troisième valeur de découpage détermine de combien avancer entre les éléments sélectionnés.
readings = [8, 9, 10, 11, 12, 13]
print(readings[::2])Sortie :
[8, 10, 12]La sélection commence au premier élément et avance de deux en deux.
Une copie par découpage produit une nouvelle liste qui peut être mise à jour indépendamment.
baseline = ["queued", "running", "done"]
preview = baseline[:]
preview[1] = "paused"
print(baseline)
print(preview)Sortie :
['queued', 'running', 'done']
['queued', 'paused', 'done']baseline ne change pas. Appeler baseline.copy() est une autre façon d'effectuer ce type de copie.
| Besoin | Syntaxe |
|---|---|
Prendre du début jusqu'à stop - 1 | items[:stop] |
Prendre de start jusqu'à la fin | items[start:] |
| Prendre une plage intermédiaire | items[start:stop] |
| Prendre un élément sur deux | items[::2] |
| Copier la liste externe | items[:] ou items.copy() |
| Créer un autre nom pour la même liste | alias = items |
IndexError : il renvoie simplement la portion disponible sans erreur.candidate = baseline comme copie : les deux noms pointent alors vers la même liste.[:] et .copy() ne copient que la liste externe.