La struttura dati Lista in Python
Autore:[Antonio Gallonetto]
Array
Che cos’è un array
Un array è una sequenza di valori dello stesso tipo e ai quali si può accedere attraverso un indice e possono essere modificati. I moderni linguaggi supportano il fatto che un array possa essere di dimensione variabile, invece in quelli più datati si dichiara la dimensione del vettore, un esempio è il pascal che si dichiara in questo modo:
type
vector = array [ 1..25] of real;
Liste
In python non abbiamo gli array ma le Liste. La lista è un particolare tipo di array dove i tipi all’interno possono essere non omogenei. Quindi all’interno della lista posso avere dati di tipo diverso.
Essendo l’array una versione più ristretta della lista può tranquillamente essere implementato attraverso questo oggetto.
Definizione di lista
Una lista è una sequenza con le seguenti caratteristiche:
- I tipi di dato all’interno possono essere non omogenei
- La dimensione è variabile
- E’ possibile accedervi con un indice
- Il valore di partenza dell’indice è zero
- E’ modificabile
- E’ un oggetto e quindi eredita le funzionalità del padre
Sintassi della dichiarazione di una lista
NomeDellaLista=[elemento1,elemento2,...elementoN]
quindi gli elementi della lista sono tra parentesi quadre separati da una virgola.
Dichiarazione di una lista vuota
Sintassi: nomelista=[]
Esempio della dichiarazione di una lista
lista1=['prova',1,2,5]
Accedere ad un elemento di una lista
Si può accedere ad un elemento di una lista attraverso il suo indice.
lista1=['prova',1,2,5,'stringa1','stringa2']
print(lista1[0])
Il risultato sarà la stampa di prova.
Operazioni e metodi sulle liste
- concatenzaione
- slicing
- append()
- clear()
- del()
- extend()
- index()
- insert()
- pop()
- remove()
- reverse()
- sort()
Concatenzaione di due liste
Due liste si possono concatenare con + e con +=
- Con il simbolo + concateno due liste e come risultato avrò una terza lista. Es:
listaA=[1,2]
listaB=[3]
listaC=listaA+listaB
## la lista risultante è listaC=[1,2,3]
- con il simbolo += concateno due liste e il risultato lo metto nella prima lista
listaA=[1,2]
listaB=[3]
listaA +=listaB
## il risultato è listaA=[1,2,3]
Slicing
Lo slicing è l’estrazione di una sottolista da una lista di partenza
Sintassi per lo slicing
nomeLista[indicePartenza:indiceArrivo]
- L’elemento che si trova nell’indice di partenza è compreso
- L’elemento che si trova nell’indice di arrivo non è compreso, questo non vale se non lo dichiariamo
- Se l’indice di partenza non è dichiarato parte da 0
- Se l’indice di arrivo non è dichiarato si intende l’ultimo della lista
- Step, possiamo avere una situazione di questo tipo
nomeLista[indicePartenza:indiceArrivo:Step]
, in questo caso estrae la sottostringa che parte con indicePartenza e arriva all’indice di arrivo, e all’interno di questa sottostringa prende gli elementi nella posizione di step. Se lo step è 3, prende il terzo il sesto elemento e cosi via. - Indice negativo, ha senso solo per il secondo elemento e significa che parte dal fondo e va all’indietro un numero pari a quello indicato
- Se lo step è negativo si inverte la lista
Esempi
listaValori=[10,20,30,40,50,60,70,80,90,100]
print(listaValori)
listaValoriPrimiCinque=listaValori[0:5]
print(listaValoriPrimiCinque)
listaValoriPrimiCinque=listaValori[:5] ## Equivalente al precedente
print(listaValoriPrimiCinque)
listaValoriUltimiCinque=listaValori[5:10]
print(listaValoriUltimiCinque)
listaValoriUltimiCinque=listaValori[-5:] ## Equivalente al precedente
print(listaValoriUltimiCinque)
listaElementiPari=listaValori[::2] ## estrae gli elementi in posizione pari quindi in posizione 0,2,4,6,8
print(listaElementiPari)
listaValoriInvertita=listaValori[::-1]
print(listaValoriInvertita)
Le operazioni di concatenazione e slicing non cambiano le liste di partenza
Notare sia la concatenazione che lo slicing non cambiano la lista di partenza, ma restituiscono una nuova lista, anche nel caso di +=
che semplicemente assegna la nuova lista a quella di partenza.
append()
append è un metodo del nostro oggetto, e modifica la lista di partenza. Aggiunge un nuovo elemento alla lista.
Sintassi di append
lista.append("Nuovo Elemento")
Il metodo append ha un solo argomento, non possiamo ad esempio aggiungere due numeri contemporanemanete alla lista.
Esempio del metodo append
listaValori=[10,20,30,40,50,60,70,80,90,100]
print(listaValori)
listaValori.append('Fine')
print(listaValori) ## il risultato è [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 'Fine']
clear()
Svuota la lista
Sintassi di clear()
nomeLista.clear()
Esempio di clear()
listaValori=[10,20,30,40,50,60,70,80,90,100]
print(listaValori) ## risultato [10,20,30,40,50,60,70,80,90,100]
listaValori.clear()
print(listaValori) ## risultato []
copy()
Questo metodo copia una lista in un altra lista
sintassi di copy()
nuovaLista=nomeLista.copy()
Esempio di copy()
listaValori=[10,20,30,40,50,60,70,80,90,100,50,50]
nuovaLista=listaValori.copy()
print(nuovaLista) ## risultato [10,20,30,40,50,60,70,80,90,100,50,50]
count()
Conta il numero di volte che un valore compare in una lista
sintassi
nomeLista.count("valInList")
esempio di count
listaValori=[10,20,30,40,50,60,70,80,90,100,50,50]
numval=listaValori.count(50)
print(numval) ## In questo caso il valore 50 compare tre volte
## verifica se il valore 0 lo troviamo nella lista
VALTOCHECK=0
numval=listaValori.count(VALTOCHECK)
print(numval)
if numval>0:
print("Il valore "+str(VALTOCHECK)+" "+"è presente nella lista")
else:
print("Il valore "+str(VALTOCHECK)+" "+"NON è presente nella lista")
del()
Metodo che cancella gli elementi da una posizione di partenza ad una posizione finale
Sintassi del metodo del
del(nomeLista[indicePartenza:indiceArrivo:Step])
questo comando modifica la lista e cancella gli elementi che vado ad estrarre nella sottostringa [indicePartenza:indiceArrivo:Step]
Esempio di del()
listaValori=[10,20,30,40,50,60,70,80,90,100]
del(listaValori[::2])
print(listaValori) ## come risultato abbiamo una lista di valori che si trovava in posizione pari
listaValori=[10,20,30,40,50,60,70,80,90,100] ## riporto la lista allo stato originale
del(listaValori[-1::])
print(listaValori) ## Ho cancellato l'ultimo elemento
extend()
Questo metodo estende una lista di uno o più elementi, nel caso di più elementi extend accetta un solo parametro quindi dovremo usare ad esempio una lista. Diciamo che potremmo pensarlo come un append() evoluto.
Sintassi
nomeLista.extend(elementoDiEstensione)
Esempio e differenza con append()
listaValori=[10,20,30,40,50,60,70,80,90,100]
print(listaValori)
listaEstensione=["Fine","Inizio",110,120]
listaValori.extend(listaEstensione)
print(listaValori)
Con il metodo extend() python estende la lista con gli elementi della lista, se avessimo usato append() avrebbe aggiunto l’elemento lista in questo caso listaEstensione come un singolo elemento.
index()
Ritorna il valore della prima posizione di un elemento se è presente nella lista altrimenti genera un errore di tipo ValueError. Inizia a contare da 0.
sintassi di index()
nomelista.index(elementoDaVerificareLaPresenza)
nomelista.index(elementoDaVerificareLaPresenza,start)
nomelista.index(elementoDaVerificareLaPresenza,start,end)
Esempio di index
listaValori=[10,20,30,40,50,60,70,80,90,100,50,50]
posel=listaValori.index(50,2) ##cerca il valore 50 se è presente dal terzo elemento
print(posel) ## risultato 4 perchè inizia a contare da 0
insert()
Inserisce un elemento all’interno della lista
Sintassi del metodo insert()
nomeLista.insert(posizionePrimaDellaQuaeInserire,elementoDaInserire)
quindi il primo elemento tra parentesi e la posizione prima della quale inserire l’elemento che troviamo dopo la virgola.
Esempio di insert()
listaValori=[10,20,30,40,50,60,70,80,90,100]
print(listaValori)
listaValori.insert(0,1) ## inserisce il valore 1 come primo elemento
print(listaValori)
listaValori=[10,20,30,40,50,60,70,80,90,100] ## ripristino la lista iniziale
listaValori.insert(5,55)
print(listaValori) ## il risultato è il seguente [10, 20, 30, 40, 50, 55, 60, 70, 80, 90, 100]
len()
Indica il numero di elementi in una lista.
Sintassi di len()
numValori=len(nomeLista)
Esempio di len()
listaValori=[10,20,30,40,50,60,70,80,90,100]
print(listaValori)
numVal=len(listaValori)
print(numVal) ## risultato 10
pop()
Elimina un elemento in una data posizione.
Sintassi del metodo pop()
nomeLista(posElementoDaEliminare)
Questo medodo ha il parametro opzionale se non si indica elimina l’ultimo elemento. Nel caso il numero indicato sia superiore al numero massimo dell’indice genera un errore. Accetta un parametro negativo e in questo caso parte dal fondo a contare.
Esempio di pop()
listaValori=[10,20,30,40,50,60,70,80,90,100]
listaValori.pop(-2) ## In questo caso cancello il valore 90
listaValori.pop() ## Elimino l'ultimo elemento
listaValori.pop(0) ## Elimino l'elemento in posizione 0
print(listaValori) ## il risultato è [20, 30, 40, 50, 60, 70, 80]
remove()
Rimuove all’interno della lista il primo valore corrispondente al parametro passato
Sintassi di remove()
nomeLista.remove(elementoDaRimuovere)
Rimuove all’interno della lista l’elementoDaRimuovere. Nel caso nel quale non trovi l’elemento abbiamo un ValueError
Esempio di remove()
listaValori=[10,20,30,40,50,60,70,80,90,100]
listaValori.remove(50)
print(listaValori) ## il risultato è [10, 20, 30, 40, 60, 70, 80, 90, 100]
Vogliamo verificare se un valore appartiene ad una lista:
listaValori=[10,20,30,40,50,60,70,80,90,100]
try:
listaValori.remove(1000)
except ValueError:
print("Il valore 1000 non appartiene all'intervallo")
reverse()
Inverte l’ordine degli elementi nella lista.
Sintassi di reverse()
nomeLista.reverse()
Esempio
listaValori=[10,20,30,40,50,60,70,80,90,100]
listaValori.reverse()
print(listaValori) ## risultato [100, 90, 80, 70, 60, 50, 40, 30, 20, 10]
sort()
Ordina i valori nella lista.
Sintassi di sort()
nomeLista.sort()
oppure nomeLista.sort(*, key=None, reverse=False)
nomeLista.sort()
ordina gli elementi di una lista in ordine ascendentenomeLista.sort(*, key=None, reverse=False)
*
questo parametro significa tutti gli elementi di una listakey
è il valore con il quale sono comparati gli elementi il valore standard èkey=Nome
reverse=True
significa in ordine discendente
Esempi di sort()
listaValori=[5,1,89,77,56,0,90,81,72]
listaValori.sort()
print(listaValori)
listaValori=[5,1,89,77,56,0,90,81,72]
listaValori.sort(reverse=True)
print(listaValori)
Un altro esempio utilizzando il parametro key
listaValori=["pippo","PIPPO","pluto","PLUTO"]
listaValori.sort(key=None,reverse=True)
print(listaValori) ## risultato ['pluto', 'pippo', 'PLUTO', 'PIPPO']
listaValori=["pippo","PIPPO","pluto","PLUTO"]
listaValori.sort(key=str.lower,reverse=True)
print(listaValori) ## risultato ['pluto', 'PLUTO', 'pippo', 'PIPPO']
Esempio di estrazione dell’anno di nascita da un codice fiscale
Il codice fiscale è il settimo e ottavo carattere, quindi noi partendo da zero avremo la posizione 6 e 7, ho usato varie tecniche per l’estrazione giusto per usare le varie funzioni che abbiamo con le liste. Ovviamente parto da una stringa e la converto in una lista per poter applicare le relative funzionalità.
my_string = input("Inserisci il tuo codice fiscale: ")
if not(len(my_string)==16):
print("Questo codice fiscale è troppo lungo o troppo corto")
else:
nuovastringa=[]
## creo una lista partendo dalla stringa inserita
for i in range(0,len(my_string)):
nuovastringa.append(my_string[i])
print(nuovastringa)
## estraggo l'anno di nascita si trova in posizione 6 e 7
annonascita=nuovastringa[6:8]
print(annonascita)
## utilizzo ora una funzione distruttiva che modifica la lista quindi la copio
annonascitav2=nuovastringa.copy()
print(annonascitav2)
del(annonascitav2[:6])
del(annonascitav2[2:])
print(annonascitav2)
## creo una lista estraendo il valore in posizione 6 e 7 e appendo i valori ad una nuova lista
annonascitav3=[]
annonascitav3.append(nuovastringa[6])
annonascitav3.append(nuovastringa[7])
print(annonascitav3)