Liste 3: metodi di base¶

Riferimenti: SoftPython - liste 3

  • visualizza al meglio in
  • versione stampabile: clicca qua
  • per navigare nelle slide: premere 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

Liste - Metodi di base¶

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)

Metodo append¶

MODIFICA la lista aggiungendo UN solo elemento alla fine:

In [2]:
parole = []
In [3]:
parole.append("Questa")
In [4]:
parole
Out[4]:
['Questa']
In [5]:
parole.append("sera")
parole.append("ceniamo")
parole.append("presto")
In [6]:
parole
Out[6]:
['Questa', 'sera', 'ceniamo', 'presto']

Metodo extend¶

MODIFICA la lista aggiungendo UNA sequenza alla fine:

In [7]:
la = [30,70,50,90]
In [8]:
la.extend( [80,40,20] )   # UN argomento
In [9]:
la
Out[9]:
[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:

In [10]:
la = [70,60,80]

la.extend( "catena" )
In [11]:
la
Out[11]:
[70, 60, 80, 'c', 'a', 't', 'e', 'n', 'a']

Metodo insert¶

MODIFICA la lista inserendo ad un certo indice un elemento

In [12]:
     #0 1 2 3
la = [6,7,8,9]
la.insert(2,50)
In [13]:
la
Out[13]:
[6, 7, 50, 8, 9]
In [14]:
la.insert(0,40)
In [15]:
la
Out[15]:
[40, 6, 7, 50, 8, 9]

RICORDA: Python è lento ad eseguire insert

-> E' proprio necessario usare insert?

Metodo pop¶

MODIFICA la lista togliendo l'ultimo elemento e lo RITORNA

In [16]:
cesta = ['melone','fragola', 'anguria']
cesta.pop()
Out[16]:
'anguria'
In [17]:
cesta
Out[17]:
['melone', 'fragola']
In [18]:
frutto = cesta.pop()
In [19]:
cesta
Out[19]:
['melone']
In [20]:
frutto
Out[20]:
'fragola'

Metodo reverse¶

MODIFICA la lista rovesciandola

In [21]:
la = [7,6,8,4]
In [22]:
la.reverse()
In [23]:
la
Out[23]:
[4, 8, 6, 7]

DOMANDA: Guarda la definizione.

  1. reverse RITORNA forse qualcosa? Cosa?
  2. Ha senso scrivere pippo = la.reverse() ?

Metodo sort¶

MODIFICA la lista ordinandola

  • funziona su tutti gli oggetti ordinabili.

Proviamo i numeri:

In [24]:
lista = [ 8, 2, 4]

lista.sort()
In [25]:
lista
Out[25]:
[2, 4, 8]

Proviamo ad ordinare delle stringhe:

In [26]:
parole = [ 'mondo', 'python',  'ciao',]

parole.sort()
parole
Out[26]:
['ciao', 'mondo', 'python']

Per generare una nuova lista invece di modificare l'originale, c'è sorted()

NOTA: sorted è una funzione, non un metodo:

In [27]:
parole = [ 'mondo', 'python', 'ciao',]

sorted(parole)
Out[27]:
['ciao', 'mondo', 'python']
In [28]:
# la lista originale non è cambiata:
parole
Out[28]:
['mondo', 'python', 'ciao']

Ordine rovesciato

Possiamo indicare in fondo il parametro opzionale reverse e il suo valore, che in questo caso sarà True:

In [29]:
sorted(['mondo', 'python', 'ciao'], reverse=True)
Out[29]:
['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:

In [30]:
reversed([6,2,4])
Out[30]:
<list_reverseiterator at 0x7f3db70a0c90>

Problema: reversed produce una sequenza 'congelate', che va materializzata convertendola esplicitamente a lista così:

In [31]:
list(  reversed([6,2,4]) )
Out[31]:
[4, 2, 6]

Metodo join - da liste a stringhe¶

In [32]:
la = ['Quando', 'fuori', 'piove']

'SEPARATORE'.join(la)
Out[32]:
'QuandoSEPARATOREfuoriSEPARATOREpiove'
In [33]:
' '.join(la)
Out[33]:
'Quando fuori piove'

copy vs deep copy¶

Il metodo .copy() effettua sulo una cosiddetta copia in superficie (shallow copy)

In [34]:
 
Out[34]:
Python Tutor visualization

Copia in profondità¶

Si può fare con il modulo copy che contiene la funzione deepcopy

In [35]:
 
Out[35]:
Python Tutor visualization
In [37]:
# scrivi qui
Out[37]:
''