03. Liste

Creare una lista

x = []

i = 0

nome = input("Inserisci un nome (invio per terminare) ")

while len(nome) > 0:

    x += [nome]

    i += 1

    nome = input("Inserisci un nome (invio per terminare) ")

print("\nHai inserito i seguenti", i, "nomi")

j = 0

while j < i:

    print(x[j], "di lunghezza", len(x[j]))

    j += 1

Inserisci un nome (invio per terminare) Anna

Inserisci un nome (invio per terminare) Maria

Inserisci un nome (invio per terminare) Teresa

Inserisci un nome (invio per terminare) Giovanna

Inserisci un nome (invio per terminare) Maria Rosaria

Inserisci un nome (invio per terminare)

Hai inserito i seguenti 5 nomi

Anna di lunghezza 4

Maria di lunghezza 5

Teresa di lunghezza 6

Giovanna di lunghezza 8

Maria Rosaria di lunghezza 13


Note:

x = [] 

associa alla variabile x una lista vuota, cioè una lista con nessun elemento

x += [nome]

aggiunge un nuovo elemento in coda alla lista. In questo caso nome è una variabile associata ad una stringa, e quindi la lista conterrà delle stringhe

 print(x[j], "di lunghezza", len(x[j]))

stampa x[j], cioè una delle stringhe caricate nella lista, e la lunghezza della stringa stessa.


while len(nome) > 0:

    x += [nome]

    i += 1

l'indice i è utilizzato per contare il numero di inserimenti fatti nella lista. Questa operazione in realtà non è necessaria perché è possibile risalire al numero di elementi presenti nella lista mediante la funzione len(x)


Aggiornare una lista

nomi = ["Anna", "Rita", "Giovanna", "Paola", "Adriana", "Alessandra",

        "Stefania"]

i = 0

while i < len(nomi):

    print(nomi[i], end=" ")

    i += 1

print("\nScrivi i nomi che vuoi eliminare dall'elenco (invio per terminare)")

nome_da_eliminare = input()

while (len(nome_da_eliminare) > 0):

    nomi.remove(nome_da_eliminare)

    nome_da_eliminare = input()

print("Scrivi i nomi che vuoi aggiungere all'elenco (invio per terminare)")

nome_da_inserire = input()

while (len(nome_da_inserire) > 0):

    nomi.append(nome_da_inserire)

    nome_da_inserire = input()

print("L'elenco dopo i tuoi aggiornamenti è il seguente:")

i = 0

while i < len(nomi):

    print(nomi[i], end=" ")

    i += 1

print("\nOra elimino il primo elemento della lista...")

n = nomi.pop(0)

print("Ho eliminato", n)

print("Ora il primo elemento della lista è:", nomi[0])


Anna Rita Giovanna Paola Adriana Alessandra Stefania

Scrivi i nomi che vuoi eliminare dall'elenco (invio per terminare)

Stefania

Rita

Scrivi i nomi che vuoi aggiungere all'elenco (invio per terminare)

Teresa

Antonella

L'elenco dopo i tuoi aggiornamenti è il seguente:

Anna Giovanna Paola Adriana Alessandra Teresa Antonella

Ora elimino il primo elemento della lista...

Ho eliminato Anna

Ora il primo elemento della lista è: Giovanna


Anna Rita Giovanna Paola Adriana Alessandra Stefania

Scrivi i nomi che vuoi eliminare dall'elenco (invio per terminare)

Tiziana

Traceback (most recent call last):

  File "C:/Users/bs/Desktop/workspace/Hello.py", line 11, in <module>

    nomi.remove(nome_da_eliminare)

ValueError: list.remove(x): x not in list

Note:


nomi = ["Anna", "Rita", "Giovanna", "Paola", "Adriana", "Alessandra",

          "Stefania"]

associa alla variabile nomi una lista costituita da 7 stringhe


while i < len(nomi):

    print(nomi[i], end=" ")

    i += 1

stampa ordinatamente tutti gli elementi della lista. Nella funzione print() il secondo parametro end=" " è una direttiva che specializza il comportamento della funzione print(). In particolare indica che al termine della stampa deve essere lasciato uno spazio bianco (l'azione di default di print(), dopo la stampa,  è andare a capo)

nomi.remove(nome_da_eliminare)

rimuove dalla lista associata alla variabile nomi il primo elemento che corrisponde alla stringa indicata dal parametro nome_da_eliminare. Se tale stringa non esiste l'istruzione genera un errore che blocca il programma se non opportunamente gestito

nomi.append(nome_da_inserire)

inserisce in coda alla lista associata alla variabile nomi un nuovo elemento.

L'istruzione è equivalente alla seguente:

nomi += [nome_da_inserire]

n = nomi.pop(0)

assegna alla variabile n il valore dell'elemento della lista posto in posizione 0 e, contestualmente, elimina l'elemento dalla lista. La numerazione degli elementi successivi all'elemento eliminato (in questo caso tutti i restanti elementi) verrà aggiornata di conseguenza.

Controllo dell'input

La procedura fin qui analizzata non controlla l'input e quindi consente la duplicazione dei nomi inseriti nella lista e la cancellazione di un nome inesistente (provocando un errore a run-time).

La procedura seguente tiene conto di questi aspetti.

nomi = ["Anna", "Rita", "Giovanna", "Paola", "Adriana", "Alessandra",

        "Stefania"]

i = 0

while i < len(nomi):

    print(nomi[i], end=" ")

    i += 1

print("\nScrivi i nomi che vuoi eliminare dall'elenco (invio per terminare)")

nome_da_eliminare = input()

while (len(nome_da_eliminare) > 0):

    if nome_da_eliminare in nomi:

        nomi.remove(nome_da_eliminare)

    else:

        print(nome_da_eliminare, "non è in elenco riprova")

    nome_da_eliminare = input()

print("Scrivi i nomi che vuoi aggiungere all'elenco (invio per terminare)")

nome_da_inserire = input()

while (len(nome_da_inserire) > 0):

    if nome_da_inserire not in nomi:

        nomi.append(nome_da_inserire)

    else:

        print(nome_da_inserire, "è già in elenco, riprova")

    nome_da_inserire = input()

print("L'elenco dopo i tuoi aggiornamenti è il seguente:")

i = 0

while i < len(nomi):

    print(nomi[i], end=" ")

    i += 1

Note:

if nome_da_eliminare in nomi:

verifica se nella lista associata alla variabile nomi è presente l'elemento

nome_da_eliminare