%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]] > > | [[Code et Développement/Programmation/Lecture de Code - Python/07_listes\|← Listes]] | [[Code et Développement/Programmation/Lecture de Code - Python/09_tuples\|Tuples →]] | > |:---|---:| %% nav-fin %% # Tranches et séquences (slicing) Le slicing s'applique à toute **séquence** Python : chaînes (`str`), listes (`list`), tuples (`tuple`). --- ## Syntaxe générale ```python seq[debut:fin:pas] ``` | Paramètre | Défaut | Signification | |---|---|---| | `debut` | 0 | indice de départ (inclus) | | `fin` | `len(seq)` | indice de fin (exclu) | | `pas` | 1 | saut entre chaque élément | --- ## Indices positifs ```python s = "abcde" s[1:4] # vaut 'bcd' indices 1, 2, 3 s[2:] # vaut 'cde' de l'indice 2 jusqu'à la fin s[:3] # vaut 'abc' du début à l'indice 3 exclu s[:] # vaut 'abcde' copie complète ``` **Règle :** `s[a:b]` contient `b - a` éléments (si a < b). --- ## Indices négatifs Les indices négatifs comptent depuis la fin : `-1` désigne le dernier élément, `-2` l'avant-dernier. Le composant ci-dessous affiche, sous chaque caractère, son indice positif et son indice négatif. ```python s = "abcde" s[-1] # vaut 'e' dernier caractère s[-3:] # vaut 'cde' les 3 derniers s[:-2] # vaut 'abc' tout sauf les 2 derniers s[-4:-1] # vaut 'bcd' de l'indice -4 à l'indice -1 exclu ``` --- ## Le pas ```python s = "abcdefgh" s[::2] # vaut 'aceg' un caractère sur deux s[1::2] # vaut 'bdfh' un sur deux en commençant à 1 s[::-1] # vaut 'hgfedcba' chaîne inversée s[6:1:-2] # vaut 'gec' de 6 à 1 exclu, pas de -2 ``` **Astuce classique :** `s[::-1]` inverse une séquence. **À manipuler :** écrivez un indice ou une tranche, les caractères pris s'affichent dans l'ordre. ```sq-tranche séquence: "abcdefgh" expression: s[6:1:-2] ``` --- ## Slicing sur les listes La syntaxe est la même. Le résultat est une nouvelle liste. ```python lst = [10, 20, 30, 40, 50] lst[1:4] # vaut [20, 30, 40] lst[::-1] # vaut [50, 40, 30, 20, 10] liste inversée lst[::2] # vaut [10, 30, 50] un élément sur deux # Modification par tranche lst[1:3] = [99, 88] # lst vaut [10, 99, 88, 40, 50] ``` --- **À manipuler :** la même syntaxe sur une liste. ```sq-tranche séquence: [10, 20, 30, 40, 50] nom: lst expression: lst[1:4] ``` ## Tableau récapitulatif | Expression | Résultat sur `"abcde"` | Sens | |---|---|---| | `s[1:4]` | `'bcd'` | indice 1 à 3 | | `s[2:]` | `'cde'` | de 2 à la fin | | `s[:3]` | `'abc'` | du début à 2 | | `s[-2:]` | `'de'` | les 2 derniers | | `s[:-1]` | `'abcd'` | tout sauf le dernier | | `s[::-1]` | `'edcba'` | inversé | | `s[::2]` | `'ace'` | un sur deux | --- ## Pièges fréquents - **La borne de fin est exclue** : `s[1:4]` contient les indices 1, 2, 3, soit `4 - 1 = 3` éléments. - **Début supérieur ou égal à la fin avec un pas positif : tranche vide** : `s[5:1]` vaut `''`. Pour parcourir de 5 vers 1, il faut un pas négatif : `s[5:1:-1]`. - **Une tranche hors limites ne provoque pas d'erreur** : `s[0:100]` sur une chaîne de 5 caractères renvoie `s` entière. - **`lst[::-1]` renvoie une nouvelle liste** : la liste d'origine est inchangée. --- ## Exemple — couper une chaîne en deux moitiés ```python s = input() # entrée : abcdef n = len(s) # n vaut 6 mid = (n + 1) // 2 # mid vaut 3 print(s[mid:] + s[:mid]) ``` **Trace** : `s[3:]` vaut `'def'` et `s[:3]` vaut `'abc'`. **Sortie : `defabc`** %% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]] > > | [[Code et Développement/Programmation/Lecture de Code - Python/07_listes\|← Listes]] | [[Code et Développement/Programmation/Lecture de Code - Python/09_tuples\|Tuples →]] | > |:---|---:| %% nav-fin %%