Retour au cours

slicing sur listes : techniques et astuces

dans cette leçon, vous allez apprendre à utiliser la syntaxe slicing pour extraire, copier ou manipuler des parties de liste.

objectifs

  • comprendre la syntaxe [start:stop:step]
  • extraire des sous-listes
  • utiliser des pas positifs et négatifs
  • copier une liste avec slicing
  • éviter les erreurs d’index hors limites

rappel : indexation

  • index positif : à partir du début (0 premier élément)
  • index négatif : à partir de la fin (-1 dernier élément)

slicing de base [start:stop]

extrait les éléments de start inclus jusqu’à stop exclu.

nums = [0, 1, 2, 3, 4, 5]
nums[1:4]     # [1, 2, 3]
nums[:3]      # [0, 1, 2]   (start implicite = 0)
nums[3:]      # [3, 4, 5]   (stop implicite = fin)

indices hors limites → pas d’erreur :

nums[:99]     # [0, 1, 2, 3, 4, 5]

slicing avec step [start:stop:step]

step peut être positif ou négatif.

nums[::2]     # [0, 2, 4]
nums[1::2]    # [1, 3, 5]
nums[::-1]    # [5, 4, 3, 2, 1, 0] (renversement)

copie avec slicing

copie = nums[:]   # copie superficielle

⚠ les sous-listes créées pointent vers les mêmes objets si la liste contient des objets mutables.

modifier via slicing

  • remplacement :
nums[1:3] = [10, 11]
  • insertion :
nums[2:2] = [99]  # insère à l'index 2
  • suppression :
nums[1:4] = []    # supprime indices 1 à 3

pas négatif pour inverser ou extraire en arrière

abc = ["a", "b", "c", "d", "e"]
abc[::-1]    # ["e", "d", "c", "b", "a"]
abc[4:1:-1]  # ["e", "d", "c"]

bonnes pratiques

  • utilisez [:] pour copier une liste simple
  • pour inverser, préférez reversed(seq) si vous n’avez pas besoin d’une liste
  • évitez les slices avec pas = 0 (ValueError)

mini exemples exécutables

# extraire un bloc au milieu
data = list(range(10))
print(data[3:7])   # [3, 4, 5, 6]
# enlever le premier et le dernier
milieu = data[1:-1]
print(milieu)
# remplacer une section
data[4:6] = [99, 100]
print(data)
# inversion
print(data[::-1])

pièges courants

  • oublier que stop est exclu
  • penser que [:] copie profondément (non, c’est superficiel)
  • confondre slicing avec indexation (slicing renvoie une nouvelle liste)

exercices

  1. créer une liste de 10 nombres, afficher les 3 du milieu.
  2. inverser une liste sans reversed().
  3. insérer [7, 8, 9] à la position 3 d’une liste [1, 2, 3, 4, 5] avec slicing.
  4. supprimer les 2 premiers éléments d’une liste avec slicing.
  5. extraire tous les éléments d’indice pair d’une liste avec slicing.