Le liste
La lista, o elenco, è un insieme ordinato di più elementi in un'unica variabile; essa vienecreata utilizzando le parentesi quadre; ad esempio:
invitati = ['Giovanni', 'Michelangelo', 'Riccardo', 'Angelo']
print(invitati)
['Giovanni', 'Michelangelo', 'Riccardo', 'Angelo']
Le parentesi quadre indicano l'inizio e la fine della lista.
È possibile creare una lista vuota, []
Gli elementi della lista sono
- ordinati,
cioè gli elementi hanno un ordine definito e sono indicizzati (ognuno memorizzato per posizione) - modificabili,
sono mutabili, cioè è possibile aggiungere o rimuovere elementi dopo che la lista è stata creata; se si aggiungono nuovi elementi, questi verranno posti alla fine della lista - consentono valori duplicati, ciò è possibile poiché gli elementi sono distinti per l'indice e non per il valore
- possono essere di qualsiasi tipo di dati, anche un'altra lista1
- non necessariamente omogenee; cioè possono essere anche di tipo diverso fra loro
In Python le liste sono definite come oggetti di tipo list e possono essere passati come attributi di funzioni.
Il ciclo for che abbiamo visto per le stringhe è applicabile anche alle liste.
�Esercizio
Scrivere una lista di numeri interi ed un programma che, con il ciclo for, sommi tutti i suoi elementi.
Una possibile soluzione
lista = [3, 6, 9, 12, 15]
somma = 0
for numero in lista:#per ciascun numero presente in lista
somma += numero
print(f"Il risultato della somma è {somma}")
# print(sum(lista))
�Esercizio
Scrivere un programma che moltiplichi tra loro tutti gli elementi di una lista diversi da zero.
Una possibile soluzione
lista = [3, 6, 9, 12, 15]
prodotto = 1
for numero in lista:
if numero != 0:
prodotto *= numero
print(f"Il risultato della moltiplicazione fra tutti gli elementi della lista è {prodotto}")
�Esercizio
Scrivere una funzione che, data una lista di numeri, disegni un istogramma orizzontale con il carattere speciale █ (FULL BLOCK)
numeri = [3, 9, 6, 15]
def istogramma(lista):
for numero in lista:
print("█" * numero)
# print(chr(9608) * numero)
istogramma(numeri)
Risultato
███
█████████
██████
███████████████
� Esercizio
Scrivere una lista di numeri interi ed un programma che, senza usare la funzione max(), ne visualizzi il più grande utilizzando il for e l'if.
Una possibile soluzione
numeri = [42, 9, 23, 11, 17, 56, 3]
massimo = numeri[0]
for numero in numeri:
if numero > massimo:
massimo = numero
print(f"Il numero maggiore della lista {numeri} è: {massimo}")
# print(max(numeri))
Accesso agli elementi di una lista
Proprio perché gli elementi della lista sono indicizzati, è possibile accedervi facendo riferimento al loro indice2; si tenga presente che il primo di essi ha indice 0 e non 1. All'uopo si fa uso dell'operatore porzione [ ] o slicing.
Esempi:
lista = ['Giovanni', 20, 'Riccardo', True]
print(lista[2]) # terzo elemento della lista (1)
print(lista[0:2]) # primo e secondo elemento della lista (2)
print(lista[:2]) # primo e secondo elemento della lista (3)
print(lista[1:4]) # secondo, terzo e quarto elemento (4)
print(lista[1:]) # dal secondo all'ultimo elemento (5)
print(lista[-1]) # dall'ultimo a ritroso (6)
Risultati
Riccardo # (1)
['Giovanni', 20] # (2)
['Giovanni', 20] # (3)
[20, 'Riccardo', True] # (4)
[20, 'Riccardo', True] # (5) True # (6)
Dagli esempi si evince:
- è possibile specificare un intervallo di indici indicandone l'inizio e la fine:il valore restituito sarà ancora una lista costituita dagli elementi individuati mediante gli indici
- a differenza dell'elemento avente come indice il limite inferiore dell'intervallo il quale viene incluso nella nuova lista, l'elemento avente come indice l'estremo superiore viene escluso
- se viene omesso il limite inferiore dell'intervallo, la nuova lista inizierà dal primo elemento, cioè quello di indice 0
- se viene omesso il limite superiore dell'intervallo, la nuova lista inizierà dall'elemento avente per indice l'estremo inferiore e proseguirà fino all'ultimo elemento della lista
- se si indicano indici negativi, la ricerca inizia dalla fine della lista
- se si indica un intervallo con estremi negativi, in questo caso viene escluso l'elemento avente per indice l'estremo inferiore.
Per controllare se Giovanni è presente nella lista degli invitati, si può ricorrere all'operatore booleano3 in; tre esempi:
Esempio 1
invitati = ['Giovanni', 'Michelangelo', 'Riccardo', 'Angelo']
x = 'Giovanni' in invitati
print(x)
Risultato
True
Esempio 2
invitati = ['Giovanni', 'Michelangelo', 'Riccardo', 'Angelo']
if 'Giovanni' in invitati:
print('Giovanni è nella lista degli invitati')
Risultato:
Giovanni è nella lista degli invitati
Angelo G. ha proposto che sia l'utente a digitare l'elemento per il quale determinare l'appartenenza o meno alla lista con il seguente codice:
invitati = ["Angelo","Federico","Giovanni","Marta"]
x = input("E' tra gli invitati? ")
if x in invitati:
print(f"{x} è tra gli invitati")
else:
print(f"{x} non è tra gli invitati")
Anche combinando not con in, è possibile sapere se un elemento non è contenuto nella lista:
Esempio 3
invitati = ['Giovanni', 'Michelangelo', 'Riccardo', 'Angelo']
if 'Giuseppe' not in invitati:
print('Giuseppe non è stato invitato')
Risultato
Giuseppe non è stato invitato
E se si vuol sapere il numero degli elementi della lista? Basta usare la la funzione integrata len()
invitati = ['Giovanni', 'Michelangelo', 'Riccardo', 'Angelo']
print(len(invitati))
Risultato
4
______________________
NOTE
1 In tal caso si parla di lista annidata.
2 Un indice può essere sia un numero intero, sia una espressione che produca un numero intero.
3 Nel senso che restituisce vero o falso.