Come suddividere una lista in Python (indici, passaggi e inversione)

Scopri come suddividere gli elenchi in Python utilizzando la potente sintassi delle parentesi. Argomenti principali di avvio, arresto e passaggio, indicizzazione negativa ed elenchi di inversione.

Prova questa soluzione nell'editor

Panoramica

L'affettamento è una delle funzionalità più intuitive e potenti di Python, che consente di estrarre sottoinsiemi di un elenco, tupla o stringa con una sintassi pulita e concisa. Invece di scrivere cicli dettagliati per copiare elementi specifici da un elenco, la notazione delle sezioni di Python ti consente di specificare un intervallo di indici all'interno di parentesi quadre.

La sintassi completa per l'affettamento dell'elenco è "my_list[start:stop:step]". L'indice "start" è inclusivo, l'indice "stop" è esclusivo e "step" definisce l'incremento tra gli elementi (il valore predefinito è 1). Se ometti `start`, Python viene impostato automaticamente all'inizio dell'elenco. Se ometti `stop`, Python viene impostato automaticamente alla fine dell'elenco. Ciò rende l'estrazione di porzioni di raccolte altamente espressiva.

Lo slicing è anche estremamente versatile perché supporta indici negativi. Un indice di inizio o fine negativo conta all'indietro dalla fine dell'elenco (dove "-1" rappresenta l'ultimo elemento). Impostando un valore di passaggio negativo, ad esempio `my_list[::-1]`, puoi recuperare rapidamente una copia invertita dell'elenco. Comprendere gli intervalli delle sezioni è essenziale per un'estrazione pulita dei dati.

Codice e output di esecuzione

Questo script dimostra la suddivisione dell'elenco utilizzando diversi intervalli di avvio, arresto, passaggi, indicizzazione negativa e inversione dell'elenco.

list_slicing.py
Prova nell'editor
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)
Uscita 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]

Implementazione passo dopo passo

  • Utilizzare list[start:stop] per estrarre gli elementi dall'indice start fino allo stop, escluso.
  • Ometti gli indici di inizio o fine (ad esempio, lista[:4] o lista[4:]) per tagliare dal limite della lista.
  • Passa un terzo argomento all'interno della parentesi list[::step] per saltare gli elementi a intervalli regolari.
  • Utilizza indici negativi per contare gli elementi all'indietro a partire dalla fine della raccolta.

Domande frequenti

L'affettamento modifica l'elenco originale?

No, il frazionamento dell'elenco restituisce una copia superficiale dell'intervallo richiesto, lasciando l'elenco originale completamente invariato.

Cosa succede se gli indici delle sezioni sono fuori limite?

A differenza dell'accesso a un singolo indice che solleva un IndexError, l'affettamento è tollerante e limita semplicemente l'intervallo ai limiti dell'elenco, restituendo un elenco vuoto se nessun elemento rientra nell'intervallo.

Argomenti correlati

Risorse Python consigliate

Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.