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:

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 di due liste

Due liste si possono concatenare con + e con +=

listaA=[1,2]
listaB=[3]
listaC=listaA+listaB
## la lista risultante è listaC=[1,2,3]
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]

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()

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)

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)

Argomenti correlati: