Show More
Menu
Image
Hi there! I am Federico Trotta

Technical Writer

Liste in Python: La Guida Definitiva per Lavorare con Raccolte Ordinate di Dati

23/11/2023
By Federico
0 Comments
Post Image

Durante la programmazione dobbiamo sempre occuparci della struttura dei dati, altrimenti dette data structures in Inglese.

Ciò che intendo è che dobbiamo archiviare le informazioni da qualche parte in modo da poterle riutilizzare in seguito. Questo è molto importante per l’analisi dei dati e la Data Science, ma, in realtà, è importante nella programmazione in generale.

Python è un linguaggio di programmazione molto flessibile e ci dà la possibilità di utilizzare diversi tipi di strutture dati.

In questo articolo analizzeremo le liste in Python. Se sei un principiante in Python e stai cercando una guida completa sugli elenchi, allora questo articolo fa sicuramente al caso tuo.


Cosa sono le liste in Python?

In Python, una lista è una struttura dati incorporata nel linguaggio stesso che ci consente di archiviare e manipolare dati sotto forma di testo o numeri.

Le liste memorizzano i dati in modo ordinato, il che significa che è possibile accedere agli elementi di una lista in base alla loro posizione.

Le liste sono anche un tipo modificabile di struttura dati, al contrario delle tuple. Infine, le liste possono anche memorizzare valori duplicati senza generare errori.

Le 9 principali funzionalità delle liste in Python, con esempi

Il modo migliore per imparare Python è mettere le dita sulla tastiera e, possibilmente, risolvere un problema reale.

Quindi, adesso mostreremo le 9 caratteristiche principali delle liste in Python con esempi di codice perché, come vedremo, la teoria non ha molto senso nella programmazione: dobbiamo solo scrivere codice e risolvere i problemi.

Come creare liste in Python

In Python, una lista si crea con le parentesi quadrate:

# Create a simple list
numbers = [1,2,3,"dog","cat"]
# Show list
print(numbers)
>>>
[1, 2, 3, 'dog', 'cat']

Un altro modo per creare una lista è utilizzare la funzione list presente in Python.

Ad esempio, supponiamo di voler creare un elenco di numeri compresi tra 0 e 9. Possiamo utilizzare il metodo range per creare l’intervallo, quindi possiamo passarlo come argomento al methodo list per creare una lista in questo modo :

# Create a list in the range
list_range = list(range(10))
# Show list
print(range_list)
>>>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Inoltre, possiamo creare la cosiddetta lista di liste (list of lists in Inglese) che non è nient’altro che una serie di liste nidificate tra di sé.

Ad esempio, supponiamo di voler memorizzare i dati relativi ai tempi misurati in secondi delle persone che corrono. Se abbiamo bisogno di questi dati sotto forma di lista possiamo creare una lista di liste in questo modo:

# Create a list of lists
times = [["Jhon"], [23, 15, 18], ["Karen"], [17, 19, 15],
        ["Tom"], [21, 19, 25]]
# Print list
print(times)
>>>
[['Jhon'], [23, 15, 18], ['Karen'], [17, 19, 15], ['Tom'], [21, 19, 25]]

Accedere agli elementi delle liste in Python

È possibile accedere agli elementi di una lista in base alla loro posizione. Ciò che dobbiamo ricordare è che in Python si inizia a contare da 0. Ciò significa che si accede al primo elemento con uno 0:

# Create a list of elements
values = [1,2,3,"dog","cat"]
# Print elements by accessing them
print(f"The first element is: {values[0]}")
print(f"The fourth element is: {values[3]}")
>>>
The first element is: 1
The fourth element is: dog

Quindi, dobbiamo solo fare attenzione a contare nella maniera corretta.

Accedere a una lista di liste è un pochino più complicato, ma non è difficile.

Dobbiamo prima accedere alla posizione relativa alla lista esterna, poi contiamo in quella interna. Ecco come si fa:

# Create a list of lists
times = [["Jhon"], [23, 15, 18], ["Karen"], [17, 19, 15],
        ["Tom"], [21, 19, 25]]
# Print
print(f"The first runner is:{times[0]}.\nHis first registered time is:{times[1][0]}\nThe min registered time is:{min(times[1])}")
>>>
The first runner is:['Jhon'].
His first registered time is:23
The min registered time is:15

Jhon è il primo corridore registrato, quindi accediamo a lui con times[0].

Poi, vogliamo calcolare il suo primo tempo registrato. Per fare ciò dobbiamo digitare times[1][0] perché:

  • [1] si riferisce alla seconda posizione, rispetto alla lista esterna. Ciò significa che abbiamo avuto accesso all’elenco interno [23, 15, 18].
  • [0] accede al primo numero della lista interna che, appunto, è 23.

Modificare gli elementi di una lista in Python

Come abbiamo detto, le liste sono elementi modificabili. Per modificare un elemento di una lista dobbiamo accedere ad esso.

Facciamo un esempio:

# Create a list of numbers
numbers = [1, 2, 3, 4, 5]
# Modify the third element
numbers[2] = 10
# Print new list
print(numbers)
>>>
[1, 2, 10, 4, 5]

Quindi, in questo caso, abbiamo modificato il terzo elemento cambiando il suo valore da 3 a 10.

Ma possiamo anche modificare il testo. In particolare, frasi.

Vediamo un esempio:

# Create a sentence in a list
sentence = list("Hello, World!")
# Substitute "world" with "Python"
sentence[7:] = list("Python!")
# Print sentence
print(''.join(sentence))
>>>
"Hello, Python!"

Abbiamo sostituito tutte le lettere nella nostra lista “sentence” dal settimo (fai partire il conteggio da 0, come abbiamo detto prima) elemento all’ultimo con sentence[7:]. Abbiamo quindi utilizzato il metodo ''.join(frase) per stampare la frase intera. Qesto perché, se avessimo usato semplicemente print(), stamperebbe le lettere come singoli elementi in questo modo:

print(sentence)
>>>
['H', 'e', 'l', 'l', 'o', ',', ' ', 'P', 'y', 't', 'h', 'o', 'n', '!']

Aggiungere elementi ad una lista in Python

Dato che le liste sono mutabili, possiamo aggiungervi nuovi elementi, se ne abbiamo bisogno, e abbiamo un paio di metodi per farlo.

Il primo consiste nell’utilizzare il metodo append() che è particolarmente adatto se dobbiamo aggiungere un solo elemento ad una lista. Per esempio:

# Create a list with fruits
fruits = ['apple', 'banana']
# Append the element "orange" to the list
fruits.append('orange')
# Print list
print(fruits)
>>>
['apple', 'banana', 'orange']

Un altro modo per aggiungere elementi a una lista esistente è utilizzare il metodo extend() che è particolarmente adatto se dobbiamo aggiungere più di un elemento alla volta. Ad esempio, in questo modo:

# Create a list of numbers
numbers = [1, 2, 3, 4, 5]
# Extend the list with new numbers
numbers.extend([6, 7, 8])
# Print list
print(numbers)
>>>
[1, 2, 3, 4, 5, 6, 7, 8]

Rimuovere elementi dalle liste in Python

Grazie alla mutabilità delle liste, possiamo aggiungere elementi ad esse, ma possiamo anche rimuoverli. Anche qui abbiamo due modi per farlo: possiamo utilizzare la possibilità di slicing oppure possiamo specificare direttamente un elemento da eliminare.

Vediamoli con esempi Python:

# Create a list with fruits
fruits = ['apple', 'banana', 'orange']
# Remove the element banana
fruits.remove('banana')
# Print list
print(fruits)
>>>
['apple', 'orange']

Il metodo remove() ci dà la possibilità di eliminare direttamente un elemento specifico da una lista digitandone il valore.

L’altro metodo che possiamo utilizzare è accedere alla posizione dell’elemento che vogliamo rimuovere in questo modo:

# Create a list of numbers
numbers = [1, 2, 3, 4, 5]
# Delete on element: slicing method
popped_element = numbers.pop(2)
# Print
print(numbers)  
print(f"The deleted element is:{popped_element}")  
>>>
[1, 2, 4, 5]
The deleted element is:3

Il metodo pop() rimuove un elemento da una lista accedendo al suo indice.

Quale usare? Dipende dalla situazione.

Se abbiamo una lista molto lunga, in genere è una buona idea utilizzare il metodo remove() in modo da scrivere direttamente l’elemento che vogliamo effettivamente rimuovere e non commettere errori nel conteggio degli indici.

Federico Trotta: liste in Python
Foto di Gerd Altmann da Pixabay

Concatenare liste in Python

La mutabilità delle liste ci dà la possibilità di eseguire numerose attività, come concatenare più liste insieme in un unico elenco. Questa operazione è semplice e si esegue con un + in questo modo:

# Create a list
list1 = [1, 2, 3]
# Create a second list
list2 = [4, 5, 6]
# Concatenate list
combined_list = list1 + list2
# Print cncatenated lists
print(combined_list)
>>>
[1, 2, 3, 4, 5, 6]

Questa funzionalità può, ovviamente, essere eseguita anche con le stringhe:

# Create a list
hello = ["Hello"]
# Create another list
world = ["world"]
# Concatenate
single_list = hello + world
# Print concatenated
print(single_list)
>>>
['Hello', 'world']

Un altro modo per concatenare le liste è creare un singolo elemento da una lista di liste, in questo modo:

# Create a nested list
lists = [[1, 2], [3, 4], [5, 6]]
# Create a unique list
flattened_list = sum(lists, [])
# Print unique list
print(flattened_list)
>>>
[1, 2, 3, 4, 5, 6]

Qbbiamo utilizzato il metodo sum() per ottenere tutti gli elementi della lista list e li abbiamo aggiunti a una lista vuota con [].

Calcolare la lunghezza delle liste in Python

Negli esempi precedenti, abbiamo creato noi le liste per fare esempi in Python su come manipolare le liste.

Tuttavia, quando lavoriamo con Python, capita spesso di recuperare dati da fonti diverse, il che significa che qualcuno ha creato una lista di cui non sappiamo nulla.

La prima cosa che conviene fare quando ci troviamo davanti ad una lista sconosciuta è calcolarne la lunghezza. Possiamo farlo in questo modo:

# Create a list
fruits = ['apple', 'banana', 'orange']
# Print list lenght
print(f"In this list there are {len(fruits)} elements")
>>>
 In this list there are 3 elements

Il metodo len() calcola quanti elementi ci sono in una lista, senza preoccuparsi del loro tipo.

Ciò significa che gli elementi possono essere tutti numeri, tutte stringhe o entrambi: il metodo len() li conterà tutti.

Ordinamento degli elementi nelle liste in Python

Federico Trotta: ordinare liste in Python
Foto di PIRO da Pixabay

Un’altra azione che possiamo eseguire quando non conosciamo una lista è ordinarne gli elementi. Abbiamo diversi metodi per farlo.

Cominciamo con il metodo sort():

# Create a list of numbers 
numbers = [5, 2, 1, 4, 3]
# Sort the numbers
numbers.sort()
# Print sorted list
print(numbers)
>>>
[1, 2, 3, 4, 5]

Quindi, possiamo passare la lista come argomento del metodo sort() e questo ordinerà gli elementi.

Ma cosa succede se vogliamo ordinare una lista contenente stringhe? Supponiamo ad esempio di voler ordinare gli elementi di una lista in ordine alfabetico.

Possiamo farlo in questo modo:

# Create a list of strings
words = ['cat', 'apple', 'dog', 'banana']
# Sort in alphabeticla order
sorted_words = sorted(words, key=lambda x: x[0])
# Print sorted list
print(sorted_words)
>>>
['apple', 'banana', 'cat', 'dog']

Iin questo caso, utilizziamo il metodo sorted() in cui dobbiamo specificare:

  • I parametri riguardanti la lista che vogliamo ordinare. In questo caso, words.
  • La key. Ciò significa che dobbiamo specificare una metodologia. In questo caso, abbiamo utilizzato una funzione lambda che ottiene la prima lettera di ogni elemento con x[0] eseguendo un’iterazione su tutti gli elementi: in questo modo possiamo selezionare la prima lettera di ogni parola.

Un altro modo per ordinare le stringhe è ordinarle in base al numero di caratteri per ciascun elemento. In altre parole, supponiamo di voler avere le parole più brevi all’inizio e quelle più lunghe alla fine della nostra lista. Possiamo farlo in questo modo:

# Create a list of words
words = ['cat', 'apple', 'dog', 'banana']
# Sort words by lenght
words.sort(key=len)
# Print sorted list
print(words)
>>>
['cat', 'dog', 'apple', 'banana']

Quindi, anche con il metodo sort() possiamo passare il parametro key. In questo caso, abbiamo scelto len che conta la lunghezza di ogni parola. Pertanto, l’elenco è ora ordinato iniziando dalle parole più brevi e terminando con quelle più lunghe.

Comprensione di liste in Python (list comprehension)

La comprensione delle liste (lists comprehension in Inglese) è un modo rapido e conciso per creare una nuova lista utilizzando la potenza dei cicli e delle istruzioni condizionali, ma con una sola riga di codice.

Vediamo un esempio.

Supponiamo di voler prendere i numeri da 1 a 6 e creare una lista con i loro valori al quadrato. Possiamo farlo in questo modo:

# Create a list of squared numbers
squares = [x ** 2 for x in range(1, 6)]
# Print list
print(squares) 
>>>
[1, 4, 9, 16, 25]

Possiamo ottenrer lo stesso risultato senza utilizzare la comprensione delle liste – ma al costo di molto codice – in questo modo:

# Create empty list
squares = []
# Iterate over the numbers in the range
for squared in range(1, 6):
    # Calculare squares and append to empty list
    squares.append(squared ** 2)
# Print list    
print(squares)
>>>
[1, 4, 9, 16, 25]

Quindi otteniamo lo stesso risultato ma la comprensione delle liste ci consente di raggiungerlo con una sola riga di codice.

Possiamo anche utilizzare le istruzioni if ​​in una comrensione di lista, rendendo il codice molto più veloce ed elegante rispetto al “metodo standard”, per il quale dovremmo iterare con un ciclo for per poi selezionare i valori di cui abbiamo bisogno con un’istruzione if.

Ad esempio, supponiamo di voler creare un nuovo elenco di numeri quadrati, ma di volere solo quelli pari. Possiamo farlo in questo modo:

# Create a list with numbers in a range
numbers = list(range(1, 11))
# Get the even squared numbers and create a new list
squared_evens = [x ** 2 for x in numbers if x % 2 == 0]
# Print list with squared & even numbers
print(squared_evens)
>>>
[4, 16, 36, 64, 100]

Qui dobbiamo ricordare che per prendere i numeri pari possiamo sfruttare il fatto che sono divisibili per due. Quindi, x % 2 == 0 ottiene i numeri che, se divisi per due, danno resto 0. Ciò significa che sono numeri pari.


Conclusioni

In questo articolo, abbiamo creato una guida completa sulle liste Python.

Le liste sono un tipo di struttira dati molto importante e utile. Non sono difficili da imparare, e sono una risorsa fondamentale per ogni programmatore Python.

Se, poi, vuoi approfondire le liste e confrontarle con altre strutture di dati in Python, puoi leggere questo mio articolo.


NOTA: questo articolo è stato scritto originariamente in Inglese per Towards Data Science.


Federico Trotta
Federico Trotta

Ciao! Io sono Federico Trotta, e sono un Technical Writer Freelance.

Vuoi collaborare con me? Contattami.


(Immagine in evidenza all’articolo di Jill Wellington on Pixabay)

Federico Trotta

Technical Writer: I document digital products and write articles about AI & Python programming.

Leave a reply