Qu'est-ce que le slicing en Python ?

Le slicing est une fonctionnalité de Python qui permet d'extraire des sous-ensembles (tranches) à partir de séquences comme des listes, des tuples, ou des chaînes de caractères. Le slicing est un outil très utilisé, car sa syntaxe est à la fois concise et lisible :

sequence[start:stop:step]

  • start est l'indice de début de la tranche et est inclu. S'il n'est pas renseigné, la tranche commence au début (indice 0).

  • stop est l'indice de fin de la tranche et est exclu. S'il n'est pas renseigné, la tranche inclut tous les éléments jusqu'à la fin.

  • step correspond à l'intervalle entre les éléments. S'il n'est pas renseigné, le pas par défaut est 1.

Utilisation basique

Voici quelques exemples pour illustrer les cas les plus courants :

nombres = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Extraire les éléments de l'indice 2 à 4 (5 exclu)
print(nombres[2:5])  # Résultat : [2, 3, 4]

# Extraire les 4 premiers éléments
print(nombres[:4])   # Résultat : [0, 1, 2, 3]

# Extraire les éléments à partir de l'indice 6
print(nombres[6:])   # Résultat : [6, 7, 8, 9]

# Créer une copie complète de la liste
copie_nombres = nombres[:]
print(copie_nombres) # Résultat : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Un instant

Manipuler les indices négatifs

Les indices négatifs permettent d'accéder aux éléments en partant de la fin de la séquence. L'indice -1 correspond au dernier élément, -2 à l'avant-dernier, et ainsi de suite.

Schéma pour le slicing

Schéma pour le slicing

nombres = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Extraire les 3 derniers éléments
print(nombres[-3:]) # Résultat : [7, 8, 9]

# Extraire la liste sans les 2 derniers éléments
print(nombres[:-2]) # Résultat : [0, 1, 2, 3, 4, 5, 6, 7]

# Extraire une tranche du 3ème au 2ème élément en partant de la fin
print(nombres[-3:-1]) # Résultat : [7, 8]

# Combiner un indice de départ positif et un indice de fin négatif
ma_liste = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
print(ma_liste[2:-3]) # Résultat : ['c', 'd', 'e']
Un instant

Le schéma ci-dessus illustre clairement le fonctionnement des indices positifs et négatifs. Il aide à mieux appréhender la suite de cet article.

Le paramètre step

Le paramètre step permet de sauter des éléments :

nombres = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Extraire un élément sur deux
print(nombres[::2])  # Résultat : [0, 2, 4, 6, 8]

# Extraire un élément sur trois, en partant de l'indice 1
print(nombres[1::3]) # Résultat : [1, 4, 7]

# Inverser une séquence
print(nombres[::-1]) # Résultat : [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

# Inverser et extraire un élément sur deux
print(nombres[::-2]) # Résultat : [9, 7, 5, 3, 1]

Chaînes de caractères et tuples

Le slicing n'est pas seulement utilisé pour les listes. Il fonctionne de la même manière sur les chaînes de caractères et les tuples :

# Avec une chaîne de caractères
ma_chaine = "Bonjour le monde"
print(ma_chaine[0:7]) # Résultat : "Bonjour"

# Avec un tuple
mon_tuple = (10, 20, 30, 40, 50)
print(mon_tuple[1:3]) # Résultat : (20, 30)

Modifier une liste avec le slicing

Il n'est pas possible de modifier les chaînes de caractères et les tuples, car ils sont immuables. Les listes étant muables, il est possible de les modifier :

nombres = [0, 1, 2, 3, 4, 5]

# Remplacer une tranche d'éléments
nombres[1:4] = [10, 20, 30]
print(nombres) # Résultat : [0, 10, 20, 30, 4, 5]

# Insérer des éléments sans en supprimer
nombres[1:1] = [50, 60]
print(nombres) # Résultat : [0, 50, 60, 10, 20, 30, 4, 5]

# Supprimer une tranche
del nombres[2:5]
print(nombres) # Résultat : [0, 50, 30, 4, 5]

Pour bien comprendre la différence entre le remplacement et l'insertion :

  • Si la tranche contient des éléments (start < end), l'assignation remplace les éléments par le nouveau contenu

  • Si la tranche est vide (start == end), il n'y a rien à remplacer, Python insère les nouveaux éléments à l'index start

Bravo, tu es prêt à passer à la suite

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.