8.2. Altre funzioni delle liste

Il prossimo esempio vi mostrerà moltissimi altri utilizzi per le liste (non mi aspetto che proviate ogni esempio, ma dovreste provarli finché non vi sentite a vostro agio nell'utilizzo delle liste). Iniziamo:

demolist = ['life',42, 'the universe', 6,'and',7]
print 'demolist = ',demolist
demolist.append('everything')
print "after 'everything' was appended demolist is now:"
print demolist
print 'len(demolist) =', len(demolist)
print 'demolist.index(42) =',demolist.index(42)
print 'demolist[1] =', demolist[1]
#Next we will loop through the list
c = 0
while c < len(demolist):
    print 'demolist[',c,']=',demolist[c]
    c = c + 1
del demolist[2]
print "After 'the universe' was removed demolist is now:"
print demolist
if 'life' in demolist:
    print "'life' was found in demolist"
else:
    print "'life' was not found in demolist"
if 'amoeba' in demolist:
    print "'amoeba' was found in demolist"
if 'amoeba' not in demolist:
    print "'amoeba' was not found in demolist"
demolist.sort()
print 'The sorted demolist is ',demolist
E questo è l'output:
demolist =  ['life', 42, 'the universe', 6, 'and', 7]
after 'everything' was appended demolist is now:
['life', 42, 'the universe', 6, 'and', 7, 'everything']
len(demolist) = 7
demolist.index(42) = 1
demolist[1] = 42
demolist[ 0 ]= life
demolist[ 1 ]= 42
demolist[ 2 ]= the universe
demolist[ 3 ]= 6
demolist[ 4 ]= and
demolist[ 5 ]= 7
demolist[ 6 ]= everything
After 'the universe' was removed demolist is now:
['life', 42, 6, 'and', 7, 'everything']
'life' was found in demolist
'amoeba' was not found in demolist
The sorted demolist is  [6, 7, 42, 'and', 'everything', 'life']
Questo esempio utilizza moltissime nuove funzioni. Ad esempio guardate come potete stampare un'intera lista per poi aggiungere nuovi elementi con la funzione append. len serve a contare quanti elementi sono presenti nella lista: le entrate (index) valide di una lista (cioè quelle richiamabili grazie a nome_lista [numero dell'elemento]) vanno da 0 a len - 1. La funzione index serve a sapere la posizione di un elemento in una lista: nel caso esistano elementi con lo stesso nome ritornerà la prima posizione dell'elemento. Osservate come l'istruzione demolist.index (42) ritorni il valore 1 e l'istruzione demolist [1] ritorni il valore 42. La linea #Next we will loop through the list è un semplice commento usato per introdurre le prossime righe di codice:

c = 0
while c < len(demolist):
    print 'demolist[',c,']=',demolist[c]
    c = c + 1
crea una variabile c inizialmente di valore 0 che viene incrementata finché non raggiunge l'ultimo elemento della lista. Nel frattempo l'istruzione print stampa ogni elemento della lista.

L'istruzione del può essere usata per rimuovere un elemento dalla lista. Le linee successive utilizzano l'operatore index per sapere se un elemento è presente o meno nella lista.

La funzione sort ordina la lista ed è utile se avete bisogno di una lista ordinata dall'elemento più piccolo a quello più grande oppure in ordine alfabetico.

Riassumendo possiamo compiere le seguenti operazioni:

Tabella 8-2.

esempio spiegazione
list[2] accesso all'elemento 2 dell'indice
list[2] = 3 imposta a 3 l'elemento 2 dell'indice
del list[2] cancella l'elemento 2 dell'indice
len(list) restituisci la lunghezza della lista
"value" in list è vero se "value" è un elemento della lista
"value" not in list è vero se "value" non è un elemento della lista
list.sort() ordina la lista
list.index("value") restituisce l'indice dove viene trovata la prima occorrenza di "value"
list.append("value") aggiunge l'elemento "value" alla fine della lista
Il prossimo esempio applica queste funzioni per qualcosa di più utile:
menu_item = 0
list = []
while menu_item != 9:
        print "--------------------"
        print "1. Print the list"
        print "2. Add a name to the list"
        print "3. Remove a name from the list"
        print "4. Change an item in the list"
        print "9. Quit"
        menu_item = input("Pick an item from the menu: ")
        if menu_item == 1:
                current = 0
                if len(list) > 0:
                        while current < len(list):
                                print current,". ",list[current]
                                current = current + 1
                else:
                        print "List is empty"
        elif menu_item == 2:
                name = raw_input("Type in a name to add: ")
                list.append(name)
        elif menu_item == 3:
                del_name = raw_input("What name would you like to remove: ")
                if del_name in list:
                        item_number = list.index(del_name)
                        del list[item_number]
                else:
                        print del_name," was not found"
        elif menu_item == 4:
                old_name = raw_input("What name would you like to change: ")
                if old_name in list:
                        item_number = list.index(old_name)
                        new_name = raw_input("What is the new name: ")
                        list[item_number] = new_name
                else:
                        print old_name," was not found"
print "Goodbye"
Ecco una parte dell'output:
--------------------
1. Print the list
2. Add a name to the list
3. Remove a name from the list
4. Change an item in the list
9. Quit

Pick an item from the menu: 2
Type in a name to add: Jack

Pick an item from the menu: 2
Type in a name to add: Jill

Pick an item from the menu: 1
0 .  Jack
1 .  Jill

Pick an item from the menu: 3
What name would you like to remove: Jack

Pick an item from the menu: 4
What name would you like to change: Jill
What is the new name: Jill Peters

Pick an item from the menu: 1
0 .  Jill Peters

Pick an item from the menu: 9
Goodbye
E' un programma abbastanza lungo, diamo un'occhiata al codice sorgente per capirlo meglio. La linea list = [] crea una variabile list senza elementi al suo interno. La prossima linea importante è while menu_item != 9: . Questa linea inizia un ciclo che permette di ottenere il menu di questo programma. Le linee seguenti del programma visualizzano un menu per decidere quale parte del programma eseguire.

La sezione:

current = 0
if len(list) > 0:
        while current < len(list):
                print current,". ",list[current]
                current = current + 1
else:
        print "List is empty"
Scorre tutta la lista e visualizza ogni suo elemento. len(list) conta quanti elementi sono presenti nella lista, se ritorna 0 la lista è vuota.

Poche linee più sotto appare l'istruzione list.append(name) che aggiunge un elemento alla fine della lista. Saltate giù di un'altro paio di linee e osservate questa sezione di codice:

item_number = list.index(del_name)
del list[item_number]
Qui la funzione index viene utilizzata per trovare l'indice dell'elemento richiesto per poi utilizzarlo nella sua cancellazione. del list [item_number] viene utilizzato appunto per rimuovere l'elemento.

La prossima sezione:

old_name = raw_input("What name would you like to change: ")
if old_name in list:
        item_number = list.index(old_name)
        new_name = raw_input("What is the new name: ")
        list[item_number] = new_name
else:
        print old_name," was not found"
Usa index per trovare l'elemento da modificare e sostituire il vecchio valore (old_name) con il nuovo valore desiderato (new_name).