< Home
Stampa

Liste

Sommario

La lista è una collezione ordinata di oggetti di qualsiasi tipo, come i tipi base, una collezione di qualsiasi tipo, oppure oggetti o funzioni, come vedremo più avanti.

list1 = [1,2,3]
list2 = [2, "two", [1,2,3]]

Gli elementi sono ordinati, e possono essere di tipo differente. E’ possibile sapere la lunghezza della lista con len:

print(len(list2)) # stampa 3

Per accedere ad un elemento si usa l’indice, cioè la posizione in cui compare nella lista:

print(list1[2]) # stampa 3
list1[0] = 4 # si memorizza in posizione 0 il valore 4

Gli indici partono sempre da 0. E’ possibile anche usare indici negativi, in questo caso si conta dall’ultimo elemento della lista:

list3 = ['a', 'b', 'c', 'd']
print(list3[-2]) # stampa 'c'

E’ possibile visualizzare una sottolista, operazione che viene chiamata slice, usando una coppia di indici, l’indice iniziale e quello finale: se si usa un come finale un valore positivo, si estrae fino al valore precedente. Se si usa un valore negativo, si estrae fino all’indice indicato. Se si omette l’indice iniziale si usa 0, se si omette quello finale, si usa len(nomedellalista):

print(list3[1:3]) # ['b', 'c']
print(list3[1:-1] # ['b', 'c']
print(:2) # ['a', 'b']
print(2:) # ['c', 'd']

Modifica

E’ possibile aggiungere elementi con le funzioni insert (in testa), append (in coda) e per cancellare le funzioni del e remove:

list4 = [1,2,3]
list4.insert(0) # [0,1,2,3]
list4.append(4) # [0,1,2,3,4]
del(list4[2]) # [0,1,3,4]
remove(4) # [0,1,3] ATTENZIONE, DA ERRORE SE NON TROVA NULLA

Le liste sono modificabili anche aggiungendo elementi usando coppie di indici:

list5 = [1,2,3,4]
list5[len(list4):] = [5,6,7] # [1,2,3,4,5,6,7] aggiunta in coda
list5[:0] = [-1, 0] # [-1,0, 1,2,3,4,5,6,7] aggiunta in testa

Con lo stesso sistema si possono togliere elementi:

list6 = [10,20,30,40]
list6[2:] = [] # [10,20]  

Operazioni comuni

Python offre una serie di funzioni utili sulle liste:

  • reverse: inverte l’ordine della lista
  • sort: ordina la lista
  • in e count: in verifica se un elemento è nella lista, count indica quante volte compare
  • +: concatena due liste
  • *: permette di creare una lista di valori ripetuti
  • min, max, sum: ottiene minimo, massimo e somma
  • index: restituisce l’indice del primo elemento che corrisponde (oppure da errore)

Vediamo degli esempi:

list7 = [5,7,2,4,1]
list7.reverse() # [1,4,2,7,5]
list7.sort() # [1,2,4,5,7]
4 in list7 # True
list7.count(3) # 0, non compare mai
list7 + [6,3] # [1,2,4,5,7,6,3]
list8 = [3] * 3 # [3,3,3]
min(list7) # 1
max(list7) # 7
sum(list7) # 28
lista7.index(4) # 3 

Vediamo un esempio di programma con le liste.

Ciclo for

Il ciclo for è un costrutto che serve a ripetere un blocco di istruzioni per ogni elemento di una sequenza, ad esempio una lista:

frutta = ["mela", "pera", "banana"]

for frutto in frutta: 
    print(frutto) 

Se serve sapere anche l’indice, si può usare enumerate

frutta = ["mela", "pera", "banana"]

for indice, valore in enumerate(frutta):       
    print(f"Posizione {indice} valore: {valore}") 

Range

For si usa anche per qualsiasi sequenza, con range:

for i in range(5):
   print(i) # stampa da 0 a 4

for i in range(2,6):
   print(i) # stampa da 2 a 5

for i in range(len(frutta)):
   print(frutta[i])

range è molto potente, permette anche di creare liste:

numeri = list(range(6)) # [0,1,2,3,4,5]

Esempio

Per capire quanto sono utili tutti questi strumenti, scriviamo un semplice programma per gestire spese.

spese = []
fine = False

while not fine:
  print('''\nMenu
  1: inserisci spesa
  2: elimina spesa
  3: mostra totale spese
  0: esci''')
  scelta = int(input("Inserisci scelta: "))
  if scelta == 0:
    fine = True
  elif scelta == 1:
    spesa = float(input("Inserisci spesa: "))
    spese.append(spesa)
  elif scelta == 2:
    indice = int(input("Inserisci indice: "))
    del(spese[indice])
  elif scelta == 3:    
    print("\n\nINDICE\tSPESA")
    for indice, spesa in enumerate(spese):
      print(f"{indice}\t{spesa}")
    print(f"\nTotale: {sum(spese)}")