Riferimenti: SoftPython - liste 3
Esc
Summer School Data Science 2023 - Modulo 1 informatica: Moodle
Docente: David Leoni david.leoni@unitn.it
Esercitatore: Luca Bosotti luca.bosotti@studenti.unitn.it
Metodo | Ritorna | Descrizione |
---|---|---|
list.append(object) | None |
Aggiunge un nuovo elemento alla fine della lista |
list.extend(list) | None |
Aggiunge diversi nuovi elementi alla fine della lista |
list.insert(int,object) | None |
Aggiunge un nuovo elemento a qualche posizione data |
list.pop() | object |
Rimuove e ritorna l'elemento all'ultima posizione |
list.pop(int) | object |
Dato un indice, rimuove e ritorna l'elemento a quella posizione |
list.reverse() | None |
Inverte l'ordine degli elementi |
list.sort() | None |
Ordina gli elementi |
"sep".join(seq) | str |
produce una stringa concatenando tutti gli elementi in seq separati da "sep" |
Riferimenti: SoftPython - liste 3
I METODI DELLE LISTE MODIFICANO LA LISTA SU CUI VENGONO CHIAMATI !
Quando chiami un metodo di una lista (l'oggetto a sinistra del punto .
), MODIFICHI la lista stessa (diversamente dai metodi sulle stringhe che generano sempre una nuova stringa senza cambiare l'originale)
ATTENZIONE: I METODI DELLE LISTE NON RITORNANO NULLA!
Quasi sempre ritornano l'oggetto None
(diversamente da quelli delle stringhe che ritornano sempre una nuova stringa)
MODIFICA la lista aggiungendo UN solo elemento alla fine:
parole = []
parole.append("Questa")
parole
['Questa']
parole.append("sera")
parole.append("ceniamo")
parole.append("presto")
parole
['Questa', 'sera', 'ceniamo', 'presto']
MODIFICA la lista aggiungendo UNA sequenza alla fine:
la = [30,70,50,90]
la.extend( [80,40,20] ) # UN argomento
la
[30, 70, 50, 90, 80, 40, 20]
la.extend( 80, 40, 20 ) # Funzionerà?
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/tmp/ipykernel_14079/505507485.py in <module>
----> 1 la.extend( 80, 40, 20 )
TypeError: extend() takes exactly one argument (3 given)
Ad extend
possiamo passare sequenze qualsiasi:
la = [70,60,80]
la.extend( "catena" )
la
[70, 60, 80, 'c', 'a', 't', 'e', 'n', 'a']
MODIFICA la lista inserendo ad un certo indice un elemento
#0 1 2 3
la = [6,7,8,9]
la.insert(2,50)
la
[6, 7, 50, 8, 9]
la.insert(0,40)
la
[40, 6, 7, 50, 8, 9]
RICORDA: Python è lento ad eseguire insert
-> E' proprio necessario usare insert
?
MODIFICA la lista togliendo l'ultimo elemento e lo RITORNA
cesta = ['melone','fragola', 'anguria']
cesta.pop()
'anguria'
cesta
['melone', 'fragola']
frutto = cesta.pop()
cesta
['melone']
frutto
'fragola'
MODIFICA la lista rovesciandola
la = [7,6,8,4]
la.reverse()
la
[4, 8, 6, 7]
DOMANDA: Guarda la definizione.
reverse
RITORNA forse qualcosa? Cosa?pippo = la.reverse()
?MODIFICA la lista ordinandola
Proviamo i numeri:
lista = [ 8, 2, 4]
lista.sort()
lista
[2, 4, 8]
Proviamo ad ordinare delle stringhe:
parole = [ 'mondo', 'python', 'ciao',]
parole.sort()
parole
['ciao', 'mondo', 'python']
Per generare una nuova lista invece di modificare l'originale, c'è sorted()
NOTA: sorted
è una funzione, non un metodo:
parole = [ 'mondo', 'python', 'ciao',]
sorted(parole)
['ciao', 'mondo', 'python']
# la lista originale non è cambiata:
parole
['mondo', 'python', 'ciao']
Ordine rovesciato
Possiamo indicare in fondo il parametro opzionale reverse
e il suo valore, che in questo caso sarà True
:
sorted(['mondo', 'python', 'ciao'], reverse=True)
['python', 'mondo', 'ciao']
Rovesciare liste non ordinate
E se volessimo rovesciare una lista così com'è, senza ordinarla in senso decrescente, per esempio per passare da[6,2,4]
a [2,4,6]
?
Cercando nella libreria di Python,troviamo una comoda funzione reversed()
che prende come paramatro la lista che vogliamo rovesciare e ne genera una nuova rovesciata:
reversed([6,2,4])
<list_reverseiterator at 0x7f3db70a0c90>
Problema: reversed
produce una sequenza 'congelate', che va materializzata convertendola esplicitamente a lista così:
list( reversed([6,2,4]) )
[4, 2, 6]
la = ['Quando', 'fuori', 'piove']
'SEPARATORE'.join(la)
'QuandoSEPARATOREfuoriSEPARATOREpiove'
' '.join(la)
'Quando fuori piove'
Il metodo .copy()
effettua sulo una cosiddetta copia in superficie (shallow copy)
Si può fare con il modulo copy
che contiene la funzione deepcopy
# scrivi qui
''