Un list è una raccolta mutabile di elementi in sequenza.
Come la maggior parte delle raccolte (vedi i tipi integrati tuple, dict e set), gli array possono contenere riferimenti a qualsiasi tipo di dati (o a più tipi), compresi gli altri array.
Gli array possono essere copiati in tutto o in parte tramite la notazione di slicing oppure usando <list>.copy().
Come qualsiasi sequenza, gli elementi all'interno di lists sono referenziati tramite un numero 0-based index partendo da sinistra, o un numero -1-based index partendo da destra.
Gli array supportano sia le operazioni di sequenza comuni sia quelle mutabili, come min(<list>)/max(<list>), <list>.index(), <list>.append() e <list>.reverse().
Gli elementi all'interno di un list possono essere iterati usando il costrutto for item in <list>.
for index, item in enumerate(<list>) può essere usato quando servono sia l'indice sia il valore dell'elemento.
Python fornisce anche molti utili metodi degli array per lavorare con gli array.
Una selezione di questi list methods è trattata di seguito.
Nota che quando manipoli un list con un list-method, modifichi l'array che è stato passato.
Se non vuoi mutare il list originale, dovrai almeno farne una shallow copy tramite slicing o <list>.copy().
Per aggiungere un elemento alla fine, o al «lato destro», di un array esistente, usa <list>.append(<item>):
>>> numbers = [1, 2, 3]
>>> numbers.append(9)
>>> numbers
[1, 2, 3, 9]
Invece di accodare, <list>.insert() ti permette di aggiungere l'elemento a un indice specifico dell'array.
Richiede 2 parametri:
<index> in cui vuoi che venga inserito l'elemento.<item> da inserire.Nota: se l'index fornito è 0, l'elemento verrà aggiunto all'inizio («lato sinistro») del list.
Se l'index fornito è maggiore dell'index finale del list, l'elemento verrà aggiunto nell'ultima posizione, l'equivalente di usare <list>.append(<item>).
>>> numbers = [1, 2, 3]
>>> numbers.insert(0, -2)
>>> numbers
[-2, 1, 2, 3]
>>> numbers.insert(1, 0)
>>> numbers
[-2, 0, 1, 2, 3]
<list>.extend(<item>) può essere usato per combinare un array esistente con gli elementi di un altro iterabile (per esempio un set, tuple, str o list).
L'iterabile viene scompattato e gli elementi vengono aggiunti in ordine (in questo caso, usare <list>.append(<item>) aggiungerebbe l'intero iterabile come un singolo elemento.).
>>> numbers = [1, 2, 3]
>>> other_numbers = [5, 6, 7]
>>> numbers.extend(other_numbers)
>>> numbers
[1, 2, 3, 5, 6, 7]
>>> numbers.extend([8, 9])
>>> numbers
[1, 2, 3, 5, 6, 7, 8, 9]
>>> numbers.append([8,9])
>>> numbers
[1, 2, 3, 5, 6, 7, 8, 9, [8, 9]]
Per eliminare un elemento da un array usa <list>.remove(<item>), passando come argomento l'elemento da rimuovere.
<list>.remove(<item>) solleva un ValueError se l'elemento non è presente nel list.
>>> numbers = [1, 2, 3]
>>> numbers.remove(2)
>>> numbers
[1, 3]
# Trying to remove a value that is not in the list throws a ValueError
>>> numbers.remove(0)
ValueError: list.remove(x): x not in list
In alternativa, usare il metodo <list>.pop(<index>) rimuove e return un elemento, rendendolo disponibile per l'uso.
<list>.pop(<index>) accetta un parametro opzionale: l'index dell'elemento da rimuovere e restituire.
Se l'argomento (opzionale) index non è specificato, verranno rimossi e restituiti l'ultimo elemento del list.
Se l'index specificato è maggiore dell'index dell'ultimo elemento, viene sollevato un IndexError.
>>> numbers = [1, 2, 3]
>>> numbers.pop(0)
1
>>> numbers
[2, 3]
>>> numbers.pop()
3
>>> numbers
[2]
>>> numbers.pop(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
Tutti gli elementi possono essere rimossi da un list con list.clear(). Non accetta alcun parametro.
>>> numbers = [1, 2, 3]
>>> numbers.clear()
>>> numbers
[]
Il metodo <list>.reverse() inverte l'ordine degli elementi sul posto.
>>> numbers = [1, 2, 3]
>>> numbers.reverse()
>>> numbers
[3, 2, 1]
Un array può essere riordinato sul posto con l'aiuto di <list>.sort().
L'ordinamento predefinito è crescente da sinistra.
La documentazione di Python offre ulteriori suggerimenti e tecniche per l'ordinamento.
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
# The default sort order is *ascending*.
>>> names.sort()
>>> names
["Bruce", "Natasha", "Thor", "Tony"]
Se vuoi un ordine decrescente, passa l'argomento reverse=True:
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
>>> names.sort(reverse=True)
>>> names
["Tony", "Thor", "Natasha", "Bruce"]
Nei casi in cui non vuoi mutare l'array originale, puoi usare la funzione integrata sorted(<iterable>) per ottenere una copia ordinata.
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
>>> sorted(names)
['Bruce', 'Natasha', 'Thor', 'Tony']
Il numero di occorrenze di un elemento in un array può essere calcolato con l'aiuto di list.count(<item>).
Prende come argomento l'item da contare e restituisce il numero totale di volte in cui quell'elemento compare nel list.
>>> items = [1, 4, 7, 8, 2, 9, 2, 1, 1, 0, 4, 3]
>>> items.count(1)
3
<list>.index(<item>) restituisce il numero index della prima occorrenza di un elemento passato.
Se non ci sono occorrenze, viene sollevato un ValueError.
Se non serve la posizione esatta di un elemento, l'operatore integrato in è più efficiente per verificare se un array contiene un dato valore.
L'indicizzazione parte da zero a sinistra, quindi la posizione del «primo» elemento è 0.
L'indicizzazione funziona anche da destra, iniziando da -1.
>>> items = [7, 4, 1, 0, 2, 5]
>>> items.index(4)
1
>>> items.index(10)
ValueError: 10 is not in list
Si possono anche fornire gli indici start e end per restringere la ricerca a una sezione specifica del list:
>>> names = ["Tina", "Leo", "Thomas", "Tina", "Emily", "Justin"]
>>> names.index("Tina")
0
>>> names.index("Tina", 2, 5)
3
Chaitana possiede un parco divertimenti molto popolare. Ha una sola attrazione, proprio al centro di un terreno splendidamente curato: The Biggest Roller Coaster in the World(TM). Anche se c'è solo questa attrazione, persone da tutto il mondo viaggiano e stanno in fila per ore per avere l'occasione di salire sulle montagne russe di Chaitana.
Per questa attrazione ci sono due code, ognuna rappresentata da una list:
Ti è stato chiesto di scrivere del codice per gestire meglio gli ospiti del parco. Devi implementare le seguenti funzioni il prima possibile, prima che gli ospiti (e il tuo capo, Chaitana!) si innervosiscano. Leggi con attenzione. Alcuni compiti ti chiedono di modificare o aggiornare la coda esistente, altri di farne una copia.
Definisci la funzione add_me_to_the_queue() che prende 4 parametri <express_queue>, <normal_queue>, <ticket_type>, <person_name> e restituisce la coda appropriata aggiornata con il nome della persona.
<ticket_type> è un int, dove 1 == express_queue e 0 == normal_queue.<person_name> è il nome (come str) della persona da aggiungere alla coda corrispondente.>>> add_me_to_the_queue(express_queue=["Tony", "Bruce"], normal_queue=["RobotGuy", "WW"], ticket_type=1, person_name="RichieRich")
...
["Tony", "Bruce", "RichieRich"]
>>> add_me_to_the_queue(express_queue=["Tony", "Bruce"], normal_queue=["RobotGuy", "WW"], ticket_type=0, person_name="HawkEye")
....
["RobotGuy", "WW", "HawkEye"]
Una persona è arrivata tardi al parco ma vuole mettersi nella coda dove aspettano i suoi amici. Però non ha idea di dove si trovino i suoi amici e non c'è campo per chiamarli.
Definisci la funzione find_my_friend() che prende 2 parametri queue e friend_name e restituisce la posizione nella coda del nome della persona.
<queue> è la list delle persone in attesa nella coda.<friend_name> è il nome dell'amico di cui devi trovare l'indice (la posizione nella coda).Ricorda: l'indicizzazione parte da 0 da sinistra e da -1 da destra.
>>> find_my_friend(queue=["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], friend_name="Steve")
...
1
Ora che i suoi amici sono stati trovati (nel compito 2 qui sopra), chi è arrivato tardi vorrebbe unirsi a loro nella loro posizione in coda.
Definisci la funzione add_me_with_my_friends() che prende 3 parametri queue, index e person_name.
<queue> è la list delle persone in attesa nella coda.<index> è la posizione in cui aggiungere la nuova persona.<person_name> è il nome della persona da aggiungere nella posizione indicata dall'indice.Restituisci la coda aggiornata con il nome di chi è arrivato tardi.
>>> add_me_with_my_friends(queue=["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], index=1, person_name="Bucky")
...
["Natasha", "Bucky", "Steve", "T'challa", "Wanda", "Rocket"]
Hai appena sentito dalla coda che c'è una persona davvero maleducata che spinge, urla e crea problemi. Devi cacciare quel mascalzone per il suo cattivo comportamento!
Definisci la funzione remove_the_mean_person() che prende 2 parametri queue e person_name.
<queue> è la list delle persone in attesa nella coda.<person_name> è il nome della persona da cacciare.Restituisci la coda aggiornata senza il nome della persona maleducata.
>>> remove_the_mean_person(queue=["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], person_name="Eltran")
...
["Natasha", "Steve", "Wanda", "Rocket"]
Potresti non aver mai visto due persone non imparentate identiche nell'aspetto, ma hai sicuramente visto persone non imparentate con lo stesso identico nome (omonimi)! Oggi sembra che ce ne siano molte tra i presenti. Vuoi sapere quante volte un certo nome compare nella coda.
Definisci la funzione how_many_namefellows() che prende 2 parametri queue e person_name.
<queue> è la list delle persone in attesa nella coda.<person_name> è il nome che pensi possa comparire più di una volta nella coda.Restituisci il numero di occorrenze di person_name, come int.
>>> how_many_namefellows(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"], person_name="Natasha")
...
2
Purtroppo oggi il parco è sovraffollato e devi rimuovere l'ultima persona della coda normale (le darai un buono per tornare in fast-track un altro giorno).
Dovrai definire la funzione remove_the_last_person() che prende 1 parametro, queue, cioè la coda delle persone in attesa.
Devi aggiornare la list e anche restituire con return il nome della persona rimossa, così puoi scriverle un buono.
>>> remove_the_last_person(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
...
'Rocket'
Per motivi amministrativi, devi ottenere tutti i nomi di una data coda in ordine alfabetico.
Definisci la funzione sorted_names() che prende 1 argomento, queue (la list delle persone in attesa nella coda), e restituisce una copia sorted della list.
>>> sorted_names(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
...
['Eltran', 'Natasha', 'Natasha', 'Rocket', 'Steve']
Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.