====== Slices sur les séquences ====== L'utilisation des "slices" ou du "slicing" sur les listes, ou sur tout objet en séquence (tuple, chaîne de caractères, ...) permet de "découper" des sous-listes. Si la séquence s'appelle //sequence_name//, la syntaxe du slice est : sequence_name[start:stop:step] où start est l'indice du premier élément (par défaut 0), stop est l'indice du premier élément NON REPRIS (par défaut len(seq...)) et step le pas (par défaut step = 1). Les indices négatifs équivalent aux indices modulo len(seq...). #! /usr/bin/env python # -*- coding: utf-8 -*- """ Utilisation des "slices" ou du "slicing" sur les listes, ou sur tout objet en séquence (tuple, chaîne de caractères, ...) Syntaxe : sequence_name[start:stop:step] start est l'indice du premier élément, par défaut 0 stop est l'indice du premier élément NON REPRIS, par défaut len(seq...) par défaut, step = 1 Les indices négatifs équivalent les indices modulo len(seq...) """ a=[1,3,5,7,11,13,15] print "liste exemple : ",a b=a[1:4:1] print b # [3, 5, 7] print a[:5] # [1, 3, 5, 7, 11] print a[3:] # [7, 11, 13, 15] print a[-3:] # [11, 13, 15] # un élément sur 2 : print a[::2] # [1, 5, 11, 15] # un truc pratique pour copier une liste (la nouvelle liste est indépendante) copie_a=a[:] print a # step=-1 permet de renverser la séquence print a[::-1] # [15, 13, 11, 7, 5, 3, 1] # slice et remplacement d'une sous-séquence par une séquence de longueur indépendante a[2:4]=[5,6,7] print a # [1, 3, 5, 6, 7, 11, 13, 15] # slice et insertion a[5:5]=[8,9,10] print a # [1, 3, 5, 6, 7, 8, 9, 10, 11, 13, 15] Les slices s'appliquent aussi sur les "arrays" de la librairie NumPy. ===== Slices et objets python, comparaison avec .reverse() ===== La fonction id() permet de connaître l'identifiant unique d'un objet python en mémoire Le slice "[::-1]" crée un nouvel objet qui est la liste dans l'ordre inversé des éléments de la liste d'origine, tandis que la fonctionnalité ".reverse()" appliquée à une liste effectue cette inversion sans créer une nouvelle liste. Les codes suivants permettent de le vérifier : a = [1, 2, 3] b = a a = a[::-1] print(a, b) # Output: [3, 2, 1] [1, 2, 3] print(id(a), id(b)) # → different identifiers a = [1, 2, 3] b = a a.reverse() print(a, b) # Output: [3, 2, 1] [3, 2, 1] print(id(a), id(b)) # → same identifier ===== Références ===== * [[https://medium.com/dev-genius/indexing-vs-slicing-in-python-de01cd99c499|Indexing vs Slicing in Python]]