Introduzione

Python include una serie di tipi di dati sequenziali che consentono di archiviare raccolte di dati in modo organizzato ed efficiente. I tipi di sequenza di base sono elenchi, tuple e oggetti intervallo.

Questo articolo passa attraverso gli elenchi di Python. Ti mostreremo come creare un elenco, suddividere e ordinare un elenco, aggiungere o rimuovere elementi da un elenco e così via.

Le liste sono sequenze mutabili, il che significa che possono essere modificate dopo la creazione. Gli elenchi sono uno dei tipi di dati più comunemente utilizzati in Python e vengono generalmente utilizzati per archiviare raccolte di elementi dello stesso tipo.

Creare un elenco

Gli elenchi vengono in genere creati posizionando gli elementi all'interno di una coppia di parentesi quadre [], separate da virgole. Possono avere un numero qualsiasi di elementi, che possono essere di diversi tipi. Ecco un esempio:

L = ['orange', 'white', 'green']

Le parentesi quadre senza elementi tra loro indicano un elenco vuoto:

L = []

Sebbene gli elenchi Python siano generalmente omogenei, è possibile avere elementi con tipi di dati misti:

L = [1, 'white', 6.5]

Puoi anche dichiarare elenchi nidificati in cui uno o più elementi sono anche elenchi:

L = [1, 2, ['red', 'blue']]

Più elementi possono avere lo stesso valore:

L = [1, 2, 3, 2, 2, 1]

Gli elenchi possono anche essere costruiti usando una comprensione dell'elenco, il costruttore list() e altre funzioni integrate come sorted().

Accedere agli elementi dell'elenco

Una voce di elenco può essere referenziata dal suo indice. Gli indici sono numeri interi e partono da 0 a n-1 dove n è il numero di elementi:

L = ["a", "b", "c", "d"]
      0    1    2    3

In Python gli indici sono racchiusi tra parentesi quadre:

L[index]

Ad esempio, per accedere al secondo elemento dell'elenco è necessario utilizzare:

colors = ['orange', 'white', 'green']
colors[1]
'white'

Se si fa riferimento a un indice che non esiste, viene sollevata un'eccezione IndexError:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Per accedere agli elementi in un elenco nidificato utilizzare più indici:

L = [1, 2, ["red", "blue"]]
L[2][1]
'blue'

Python consente inoltre di accedere agli elementi dell'elenco utilizzando indici negativi. L'ultimo elemento viene indicato come -1, il secondo ultimo elemento -2 e così via:

L = ["a", "b", "c", "d"]
     -4   -3   -2   -1

Ad esempio, per accedere al secondo elemento dalla fine, utilizzare:

colors = ['orange', 'white', 'green']
colors[-2]
'white'

Slicing (dividere) un elenco

In Python, puoi dividere un elenco usando il seguente modulo:

L[start:stop:step]
  • Il primo argomento specifica l'indice in cui inizia l'estrazione. Quando viene utilizzato un indice negativo, indica un offset dalla fine dell'elenco. Se questo argomento viene omesso, la suddivisione inizia dall'indice 0.
  • Il secondo argomento specifica l'indice prima del quale terminare l'estrazione; il risultato non include l'elemento "stop". Quando viene utilizzato un indice negativo, indica un offset dalla fine dell'elenco. Se questo argomento viene omesso o maggiore della lunghezza dell'elenco, lo slicing va alla fine dell'elenco.
  • Il terzo argomento è facoltativo e specifica il passaggio di slicing. Quando l'argomento "step" non viene utilizzato, il valore predefinito è 1. Quando viene utilizzato un valore negativo, la sezione prende gli elementi in ordine inverso.

Il risultato della suddivisione di un elenco è un nuovo elenco contenente gli elementi estratti e l'elenco originale non viene modificato.

Qui la sintassi legale di Python:

L[:] # copy whole list
L[start:] # slice the list starting from the element with index "start" to the end of the list.
L[:stop] # slice the list starting from the begging up to but not including the element with index "stop".
L[start:stop] #  slice the list starting from the element with index "start" up to but not including the element with index "stop".
stop"
L[::step] #  slice the list with a stride of "step"

Di seguito è riportato un esempio di base su come suddividere un elenco a partire dall'elemento con indice 1 fino a 4 ma non includendo l'elemento con indice 4:

fruits = ['Apple', 'Peach', 'Lemon', 'Strawberry', 'Grape']
fruits[1:4]
['Peach', 'Lemon', 'Strawberry']

Aggiornare il valore dell'elemento

Per modificare il valore di un elemento specifico in un elenco, fare riferimento al suo numero indice:

L[index] = value

Ecco un esempio che mostra come aggiornare il valore dell'ultimo elemento dell'elenco:

colors = ['orange', 'white', 'green']
colors[-1] = "blue"
print(colors)
['orange', 'white', 'blue']

Se esiste l'elemento con l'indice indicato, il valore viene aggiornato. Altrimenti viene sollevata un'eccezione IndexError:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

Puoi anche aggiornare una sezione di un elenco con nuovi valori:

colors = ['orange', 'white', 'green']
colors[1:3] = ['red']
print(colors)
['orange', 'red']

Il blocco di sostituzione può avere un numero di elementi inferiore, maggiore o uguale a quello dell'elenco. Ciò consente di espandere o ridurre l'elenco.

Aggiungere elementi a un elenco

Il tipo di dati elenco ha due metodi che consentono di aggiungere elementi a un elenco append() e insert().

Il metodo append() aggiunge un elemento alla fine dell'elenco. La sintassi del metodo append() è la seguente:

L.append(element)

"Element" è l'elemento da aggiungere nell'elenco. Può essere qualsiasi tipo di dati incluso un elenco. Ecco un esempio:

colors = ['orange', 'white', 'green']
colors.append('red')
print(colors)
['orange', 'white', 'green', 'red']

Il metodo insert() inserisce un elemento in una posizione specifica in un elenco e presenta la sintassi seguente:

L.insert(index, element)

"index" è la posizione in cui si desidera inserire l'elemento e "element" è l'elemento da aggiungere nell'elenco. L'esempio seguente mostra come aggiungere un elemento a un elenco nella prima posizione:

colors = ['orange', 'white', 'green']
colors.insert(0, 'red')
print(colors)
['red', 'orange', 'white', 'green']

Il metodo extend() consente di estendere un elenco con più elementi. Prende un singolo argomento e ha la sintassi seguente:

L.extend(list)

Gli elementi di "list" sono aggiunti alla fine di "L". Ecco un esempio:

colors = ['orange', 'white', 'green']
colors.extend(['blue', 'black'])
print(colors)
['orange', 'white', 'green', 'blue', 'black']

Rimuovere elementi da un elenco

Il metodo remove() accetta un argomento e rimuove il primo elemento con valore corrispondente all'argomento dall'elenco:

L.remove(element)
colors = ['orange', 'white', 'orange', 'green']
colors.remove('orange')
print(colors)
['white', 'orange', 'green']

Se l'elemento con il valore dato non esiste, viene sollevata un'eccezione ValueError:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

Il metodo pop() accetta un argomento e rimuove l'elemento con indice corrispondente all'argomento dall'elenco:

L.pop(element)

L'argomento è facoltativo e il valore predefinito è "-1", che è l'ultimo elemento dell'elenco. Il valore di ritorno del metodo è l'elemento rimosso. Ecco un esempio:

colors = ['orange', 'white', 'green']
colors.pop(1)
print(colors)
'white'
['orange', 'green']

La parola chiave del in combinazione con la notazione di sezione consente di rimuovere più di un elemento. Ad esempio, per rimuovere i primi due elementi da un elenco, utilizzare quanto segue:

colors = ['orange', 'white', 'orange', 'green']
del colors[0:2]
print(colors)
['orange', 'green']

Per rimuovere tutti gli elementi utilizzare il metodo clear(), che cancella l'elenco e non accetta alcun argomento:

colors = ['orange', 'white', 'green']
colors.clear()
print(colors)
[]

Trovare la lunghezza di un elenco

La funzione len() integrata restituisce il numero totale di elementi di un oggetto.

Per trovare una lunghezza di un elenco, passalo come argomento alla funzione len():

len(L)

Ecco un esempio:

colors = ['orange', 'white', 'green']
num = len(colors)
print(num)
3

Iterazione attraverso un elenco

Per scorrere tutti gli elementi in un elenco utilizzare il ciclo for:

colors = ['orange', 'white', 'green']
for color in colors:
 print(color)
orange
white
green

Se hai bisogno di indici, hai diversi metodi a tua disposizione. I modi più comuni sono di combinare le funzioni range() e len() o di utilizzare la funzione integrata enumerate().

L'esempio seguente mostra come recuperare l'indice e il valore di ciascun elemento nell'elenco:

colors = ['orange', 'white', 'green']
for i in range(len(colors)):
 print("Index {} : Value {}".format(i, colors[i]))
Index 0 : Value orange
Index 1 : Value white
Index 2 : Value green

Invece di usare il pattern range(len(...)) puoi usare la funzione enumerate() per scorrere un elenco in un modo più Pythonic:

colors = ['orange', 'white', 'green']
for index, value in enumerate(colors):
 print("Index {} : Value {}".format(index, value))
Index 0 : Value orange
Index 1 : Value white
Index 2 : Value green

Controllare se esiste un elemento

Per verificare se esiste un elemento in un elenco, è possibile utilizzare gli operatori in e not in:

colors = ['orange', 'white', 'green']
print('orange' in colors)

L'output sarà True o False:

True

Ecco un altro esempio usando l'istruzione if:

colors = ['orange', 'white', 'green']
if 'blue' not in colors:
    print('no')
else:
    print('yes')

L'output sarà True o False:

no

Metodi List di Python

Gli oggetti dell'elenco accettano i seguenti metodi:

  • append(x) - Aggiunge un elemento alla fine dell'elenco.
  • clear() - Rimuove tutti gli elementi dall'elenco.
  • copy() - Restituisce una copia superficiale dell'elenco.
  • count(x) - Restituisce il numero di volte che appare 'x' nell'elenco.
  • extend(iterable) - Aggiunge 'iterable' alla fine dell'elenco.
  • index(x) - Restituisce la posizione della prima occorrenza di un elemento con valore di 'x'.
  • insert(i, x) - Aggiunge un elemento in una determinata posizione.
  • pop(i) - Rimuove un elemento da una determinata posizione.
  • remove() - Rimuove l'elemento con un determinato valore.
  • reverse() - Inverte gli elementi dell'elenco.
  • sort() - Ordina le voci dell'elenco.

Conclusione

In questo articolo, abbiamo discusso su come creare e lavorare con gli elenchi in Python.