Storia della questione: Gli slicing (slicing) sono apparsi in Python fin dall'inizio, come un modo sintatticamente comodo per ottenere frammenti di sequenze senza doverli iterare manualmente con un ciclo.
Problema: I programmatori provenienti da altri linguaggi usano spesso cicli espliciti per lavorare con i sottoelenco. Questo aumenta il volume e riduce le prestazioni del codice.
Soluzione: List slicing consente di ottenere parti di una lista, stringa o altre sequenze in modo compatto, chiaro ed efficiente. I slice non modificano l'oggetto originale, ma restituiscono una copia o un view (per alcuni tipi).
Esempio di codice:
lst = [0, 1, 2, 3, 4, 5] sub = lst[1:4] # [1, 2, 3] reverse = lst[::-1] # [5, 4, 3, 2, 1, 0] every_second = lst[::2] # [0, 2, 4]
Caratteristiche chiave:
Modificare il valore in uno slice influisce sull'elenco originale?
No: quando assegni un nuovo elenco a uno slice, cambi l'elenco originale in quelle posizioni; ma quando prendi uno slice, ottieni una nuova lista.
Esempio:
lst = [1, 2, 3, 4] lst2 = lst[1:3] # [2, 3] lst2[0] = 20 # Non influisce su lst: lst2 è un nuovo oggetto
Tuttavia:
lst[1:3] = [7, 8] # questo modifica lst direttamente
Come funziona lo slice con indici negativi?
Gli indici negativi sono conteggiati dalla fine: -1 è l'ultimo elemento, -2 è il penultimo. Ad esempio, lst[:-1] significa tutti gli elementi tranne l'ultimo.
Cosa succede se si esce dai confini dell'elenco in uno slice?
Python gestisce "intelligentemente" questi casi: non ci sarà errore, semplicemente lo slice verrà tagliato ai confini disponibili. Ad esempio, lst[100:200] darà una lista vuota o il sottoelenco massimo possibile.
La gestione di una lista richiede centinaia di righe con cicli e condizioni nidificate per "tagliare" i dati in ingresso, il codice è complesso e lento.
Vantaggi:
Svantaggi:
Lo stesso codice è stato riscritto utilizzando lo slicing e le funzioni integrate, occupando meno righe e facilmente testabile.
Vantaggi:
Svantaggi: