Comment découper une liste en Python (indices, étapes et inversion)

Apprenez à découper des listes en Python à l'aide de la puissante syntaxe entre crochets. Maîtrisez les arguments de démarrage, d’arrêt et d’étape, l’indexation négative et les listes d’inversion.

Essayez cette solution dans l'éditeur

Aperçu

Le découpage est l'une des fonctionnalités les plus intuitives et les plus puissantes de Python, vous permettant d'extraire des sous-ensembles d'une liste, d'un tuple ou d'une chaîne avec une syntaxe claire et concise. Au lieu d'écrire des boucles détaillées pour copier des éléments spécifiques d'une liste, la notation slice de Python vous permet de spécifier une plage d'indices entre crochets.

La syntaxe complète du découpage de liste est `my_list[start:stop:step]`. L'index `start` est inclusif, l'index `stop` est exclusif et `step` définit l'incrément entre les éléments (par défaut à 1). Si vous omettez « start », Python se place par défaut au début de la liste. Si vous omettez « stop », Python se place par défaut à la fin de la liste. Cela rend l’extraction de parties de collections très expressive.

Le découpage est également extrêmement polyvalent car il prend en charge les indices négatifs. Un index de début ou de fin négatif compte à rebours à partir de la fin de la liste (où « -1 » représente le dernier élément). En définissant une valeur de pas négative, telle que « my_list[::-1] », vous pouvez rapidement récupérer une copie inversée de la liste. Comprendre les plages de tranches est essentiel pour une extraction propre des données.

Sortie de code et d'exécution

Ce script illustre le découpage de liste à l'aide de différentes plages de démarrage, d'arrêt, d'étapes, d'indexation négative et d'inversion de liste.

numbers = [0, 10, 20, 30, 40, 50, 60, 70, 80]

# 1. Basic slicing: elements from index 2 up to (but excluding) 6
subset = numbers[2:6]
print("Subset [2:6]:", subset)

# 2. Omitting indices: start to index 4, and index 5 to end
first_five = numbers[:5]
last_four = numbers[5:]
print("First five [:5]:", first_five)
print("Last four [5:]:", last_four)

# 3. Using a step parameter: get every second element
every_second = numbers[::2]
print("Every second [::2]:", every_second)

# 4. Negative indexing: get the last three elements
last_three = numbers[-3:]
print("Last three [-3:]:", last_three)

# 5. Reverse the list using step=-1
reversed_numbers = numbers[::-1]
print("Reversed list [::-1]:", reversed_numbers)
Sortie terminale
Subset [2:6]: [20, 30, 40, 50]
First five [:5]: [0, 10, 20, 30, 40]
Last four [5:]: [50, 60, 70, 80]
Every second [::2]: [0, 20, 40, 60, 80]
Last three [-3:]: [60, 70, 80]
Reversed list [::-1]: [80, 70, 60, 50, 40, 30, 20, 10, 0]

Mise en œuvre étape par étape

  • Utilisez list[start:stop] pour extraire les éléments du début de l'index jusqu'à l'arrêt, mais sans l'inclure.
  • Omettez les indices de début ou d'arrêt (par exemple, list[:4] ou list[4:]) pour découper à partir de la limite de la liste.
  • Passez un troisième argument à l'intérieur de la liste des crochets[::step] pour ignorer des éléments à intervalles réguliers.
  • Utilisez des indices négatifs pour compter les éléments à rebours à partir de la fin de la collection.

Foire aux questions

Le découpage modifie-t-il la liste d'origine ?

Non, le découpage de liste renvoie une copie superficielle de la plage demandée, laissant la liste d'origine entièrement inchangée.

Que se passe-t-il si les indices de tranche sont hors limites ?

Contrairement à l'accès à un index unique qui génère une IndexError, le découpage est indulgent et limite simplement la plage aux limites de la liste, renvoyant une liste vide si aucun élément ne tombe dans la plage.

Sujets connexes

Ressources Python recommandées

Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.