Contexte : Les slices (slicing) existent en Python depuis le début, comme une manière syntaxiquement pratique d'obtenir des fragments de séquences sans avoir à les parcourir manuellement avec une boucle.
Problème : Les programmeurs venant d'autres langages utilisent souvent des boucles explicites pour travailler avec des sous-listes. Cela augmente le volume de code et réduit la performance.
Solution : Le slicing de liste permet d'obtenir des parties d'une liste, d'une chaîne ou d'autres séquences de manière compacte, claire et efficace. Les slices ne modifient pas l'objet d'origine, mais retournent une copie ou une vue (pour certains types).
Exemple de code :
lst = [0, 1, 2, 3, 4, 5] sub = lst[1:4] # [1, 2, 3] reverse = lst[::-1] # [5, 4, 3, 2, 1, 0] every_second = lst[::2] # [0, 2, 4]
Caractéristiques clés :
Le changement de valeur dans une slice affecte-t-il la liste d'origine ?
Non : lorsque vous attribuez une nouvelle liste à une slice, vous modifiez la liste d'origine à ces positions ; mais en prenant une slice, vous obtenez une nouvelle list.
Exemple :
lst = [1, 2, 3, 4] lst2 = lst[1:3] # [2, 3] lst2[0] = 20 # N'affecte pas lst : lst2 est un nouvel objet
Cependant :
lst[1:3] = [7, 8] # cela modifie directement lst
Comment fonctionne une slice avec des indices négatifs ?
Les indices négatifs sont comptés à partir de la fin : -1 est le dernier élément, -2 est l'avant-dernier. Par exemple, lst[:-1] signifie tous les éléments sauf le dernier.
Que se passe-t-il si on dépasse les limites de la liste dans une slice ?
Python gère ces cas "intelligemment" : il n'y aura pas d'erreur, la slice sera simplement limitée par les frontières disponibles. Par exemple, lst[100:200] donnera une liste vide ou le sous-liste maximum possible.
Le traitement d'une liste prend des centaines de lignes avec des boucles imbriquées et des conditions pour "découper" les données d'entrée, le code est complexe et lent.
Avantages :
Inconvénients :
Le même code est réécrit en utilisant le slicing et des fonctions intégrées, occupant moins de lignes, facile à tester.
Avantages :
Inconvénients :