Python programming

programmazione
in Python

Dipartimento di Informatica
I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Strutture complesse

Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Liste, Tuple, Dizionari

Sono i veri "cavalli di battaglia" di Python.

Strutture flessibilissime, facili da usare, potenti

Immediate da usare, riconoscibili dal tipo di parentesi che le delimita

[ ] ( ) { }

Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Liste

Struttura dinamica e polimorfa.

E' il corrispondente di una Collection di Java, o dell'Array dei sogni del C++

Un array che può:

  • ridimensionarsi
  • contenere elementi di tipo diverso

La lista si definisce e usa utilizzando le parentesi quadre

Ecco una serie di esempi di liste:

l1 = [1, 2, 3, 4]
l2 = [5, 'sei', "sette", 8.0]
l3 = [ ["nove", 10] , 11 ]
l4 = [ ]    # lista vuota

Le liste possono contenere da 0 a N elementi di tipi diversi: anche altre liste (o tuple o dizionari, etc..)

Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Operazioni su liste : accesso agli elementi

Abbiamo già visto le operazioni di accesso ai caratteri di una stringa.

Sono molto simili: la differenza è che la stringa è immutabile, la lista no.

L = [1, 2, "tre", [4, 5, "sei"] ]
print(L[0])
print(L[1:4])
print(L[:-1])
print(L[3][1])
1
[2, 'tre', [4, 5, 'sei']]
[1, 2, 'tre']
5

Una lista di liste è esattamente una matrice anche se le righe possono avere dimensione diversa!!

Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Operazioni su liste : inserimento

A differenza delle stringhe, le liste si possono modificare

L = [1, 2, 3, 4]
#Aggiungere un elemento in coda
L.append("ultimo")
#Aggiungere un elemento in testa
L.insert(0, "primo")
#Aggiungere un elemento in posizione i-esima
L.insert(3, 'quattro')
print(L)
['primo', 1, 2, 'quattro', 3, 4, 'ultimo']
Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Operazioni su liste : modifica un elemento

L = [1, 2, 3, 4]
L[2] = "terzo"
print(L)
[1, 2, 'terzo', 4]

Operazioni su liste : modifica più elementi

L = [1, 2, 3, 4]
L[1:3] = ["secondo", "terzo"]
print(L)
[1, 'secondo', 'terzo', 4]
Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Operazioni su liste : rimuovere un elemento

L = [1, 2, 3, 4]
L.remove(3)
print(L)
[1, 2, 'terzo', 4]

rimuovere un elemento che non esiste non si può

L = [1, 2, 3, 4]
L.remove(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Operazioni su liste : rimuovere un elemento

rimuovere un elemento dalla coda (il contrario di append)

L = [1, 2, 3, 4]
elem = L.pop()
print(L)
print(elem)
[1, 2, 3]
4
Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Operazioni su liste : rimuovere un elemento

remove elimina solo la prima occorrenza del valore cercato

L = [1, 2, 3, 2, 4]
L.remove(2)
print(L)
[1, 3, 2, 4]

Operazioni su liste : rimuovere più elementi contigui

e' un trick...

L = [1, 2, 3, 4, 5, 6, 7, 8]
# per rimuovere 3, 4, 5
L = L[0:2] + L[5:]
print(L)
[1, 2, 6, 7, 8]
Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Operazioni su liste : somma

L'operatore + concatena due liste (come per le stringhe)

L1 = [1, 2, 3, 4]
L2 = [5, 6, 7]
L3 = L1 + L2
print(L3)
[1, 2, 3, 4, 5, 6, 7]

L'operatore - invece non funziona... :-(

L1 = [1, 2, 3, 4]
L2 = [2, 3]
L3 = L1 - L2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'list' and 'list'
Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Operazioni su liste : ordinamento

L1 = [4, 1, 3, 2]
L1.sort()   # procedura
L2 = ["una", "serie", "di", "stringhe"]
L2.sort()
print("L1 =", L1)
print("L2 =", L2)
L1 = [1, 2, 3, 4]
L2 = ['di', 'serie', 'stringhe', 'una']

l'ordinamento funziona se è presente una funzione di ordinamento booleana. Di default l'ordine lessicografico/numerico

Operazioni su liste : ribaltamento

L2 = ["una", "serie", "di", "stringhe"]
L2.reverse()
print("L2 =", L2)
L2 = ['stringhe', 'di', 'serie', 'una']
Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Operazioni su liste : ricerca e conteggio

L = [6, 7, 8, 1, 2, 3, 4, 5, 7]
print(L.index(8))
print(L.index(0))
print(L.count(7))
print(L.count(0))
2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 0 is not in list
2
0
Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Operazioni su liste : iterazione per elemento

E' possibile accedere ad ogni elemento di una lista con la seguente sintassi:

L = ["uno", "due", "tre"]
for element in L:
    print(element)
uno
due
tre

La variabile element è solo un nome simbolico che vale all'interno del ciclo e assume, in ogni iterazione, il valore dei vari elementi della lista

Posso ovviamente usare anche un altro nome!!

L = ["Ciao", "ragazzi"]
for oggetto in L:
    print(oggetto)
Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Programmazione in Python

Operazioni su liste : iterazione per posizione ed elemento

Se ho bisogno di sapere anche la posizione di un elemento, oltre al suo valore possiamo usare la funzione predefinita enumerate() sulla lista:

L = ["uno", "due", "tre"]
for posizione, elemento in enumerate(L):
    print(posizione, elemento)
0 uno
1 due
2 tre

In un colpo solo ottengo il valore e la posizione di ognuno degli elementi di una lista!

approfondisci

[https://www.geeksforgeeks.org/enumerate-in-python/]

Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

title: Programmazione in Python

Operazioni su liste : test booleano

Il valore False per le liste è la lista vuota

L1 = ["uno", "due", "tre"]
if L1:
    print("La lista L1 non è vuota e contiene ", len(L1), "elementi")

L2 = [ ]
if not L2:
    print("La lista L2 è vuota")
else:
    print("La lista non è vuota e contiene ", len(L2), "elementi")
La lista L1 non è vuota e contiene  3 elementi
La lista L2 è vuota
Dipartimento di Informatica - I.I.S. "Blaise Pascal" - Reggio Emilia

Dipartimento di Informatica
I.I.S. "Blaise Pascal" - Reggio Emilia