Python ha un ottimo tipo di elenco integrato denominato "list". I valori letterali elenco sono scritti tra parentesi quadre [ ]. Gli elenchi funzionano in modo simile alle stringhe: utilizza la funzione len() e le parentesi quadre [ ] per accedere ai dati, con il primo elemento all'indice 0. Consulta la documentazione ufficiale sull'elenco di python.org.
colors = ['red', 'blue', 'green'] print(colors[0]) ## red print(colors[2]) ## green print(len(colors)) ## 3
L'assegnazione con un segno = negli elenchi non viene creata una copia. Al contrario, l'assegnazione fa sì che le due variabili puntino all'unico elenco in memoria.
b = colors ## Does not copy the list
L'"elenco vuoto" è costituito solo da una coppia di parentesi vuote [ ]. Il "+" funziona per aggiungere due liste, quindi [1, 2] + [3, 4] restituisce [1, 2, 3, 4] (questo è proprio come il + con le stringhe).
FOR e IN
I costrutti *for* e *in* di Python sono estremamente utili e il primo utilizzo che vedremo è con gli elenchi. Il costrutto *for* - for var in list
- è un modo semplice per visualizzare ogni elemento in un elenco (o in un'altra raccolta). Non aggiungere o rimuovere elementi dall'elenco durante l'iterazione.
squares = [1, 4, 9, 16] sum = 0 for num in squares: sum += num print(sum) ## 30
Se sai che tipo di elementi c'è nell'elenco, utilizza nel loop un nome di variabile che acquisisca tali informazioni, ad esempio "num", "nome" o "url". Poiché il codice Python non ha altre sintassi che ti ricordano i tipi, i nomi delle variabili sono un modo fondamentale per stabilire cosa sta succedendo. (Questo è un po' fuorviante. Man mano che acquisisci una maggiore esposizione a Python, vedrai i riferimenti a suggerimenti di digitazione che ti consentono di aggiungere testo alle definizioni delle funzioni. Python non utilizza questi suggerimenti del tipo durante l'esecuzione nei tuoi programmi. Sono utilizzati da altri programmi come gli IDE (ambienti di sviluppo integrati) e strumenti di analisi statici come linter/controlli dei tipi per convalidare se le tue funzioni vengono chiamate con argomenti compatibili.)
Il costrutto *in* da solo è un modo semplice per verificare se un elemento appare in un elenco (o in un'altra raccolta) (value in collection
) per verificare se il valore è nella raccolta, restituendo Vero/Falso.
list = ['larry', 'curly', 'moe'] if 'curly' in list: print('yay') ## yay
I costrutti for/in sono molto usati nel codice Python e funzionano su tipi di dati diversi da list, quindi dovresti solo memorizzarne la sintassi. Potresti avere abitudini da altri linguaggi in cui inizi manualmente l'iterazione di una raccolta, dove in Python dovresti semplicemente usare for/in.
Puoi anche utilizzare for/in per lavorare su una stringa. La stringa si comporta come un elenco dei suoi caratteri, quindi for ch in s: print(ch)
stampa tutti i caratteri di una stringa.
Intervallo
La funzione intervallo(n) restituisce i numeri 0, 1, ... n-1, e l'intervallo(a, b) restituisce a, a+1, ... b-1 -- fino all'ultimo numero escluso. La combinazione del ciclo for e della funzione range() consente di creare un ciclo for numerico tradizionale:
## print the numbers from 0 through 99 for i in range(100): print(i)
Esiste una variante xrange() che evita il costo di creare l'intero elenco per i casi sensibili alle prestazioni (in Python 3, range() avrà un buon comportamento in termini di prestazioni e ci si dimentica di xrange()).
Durante il loop
Anche Python ha il valore than-loop standard e le istruzioni *break* e *continue* funzionano come in C++ e Java, alterando il corso del loop più interno. I loop for/in precedenti risolvono il caso comune di iterazione su ogni elemento di un elenco, ma il ciclo Mentre ti dà il controllo totale sui numeri di indice. Ecco un ciclo "time" che accede a ogni terzo elemento di un elenco:
## Access every 3rd element in a list i = 0 while i < len(a): print(a[i]) i = i + 3
Metodi elenco
Di seguito sono riportati altri metodi di creazione degli elenchi comuni.
- list.append(elem): aggiunge un singolo elemento alla fine dell'elenco. Errore comune: non restituisce il nuovo elenco, ma modifica solo l'originale.
- list.insert(index, elem): inserisce l'elemento in corrispondenza dell'indice specificato, spostando gli elementi verso destra.
- list.extend(list2) aggiunge gli elementi in list2 alla fine dell'elenco. L'uso di + o += in un elenco è simile all'utilizzo di extensions().
- list.index(elem): cerca l'elemento specificato dall'inizio dell'elenco e restituisce il relativo indice. Se l'elemento non viene visualizzato, genera un errore ValueError (utilizza "in" per verificare senza ValueError).
- list.remove(elem) -- cerca la prima istanza dell'elemento specificato e lo rimuove (genera ValueError se non presente).
- list.sort() -- ordina l'elenco in posizione (non lo restituisce). È preferibile utilizzare la funzione Sort() mostrata in seguito.
- list.reverse(): inverte l'elenco esistente (non lo restituisce).
- list.pop(index): rimuove e restituisce l'elemento all'indice specificato. Restituisce l'elemento più a destra se l'indice viene omesso (più o meno l'opposto di append()).
Tieni presente che si tratta di *metodi* su un oggetto list, mentre len() è una funzione che prende l'elenco (o la stringa o altro) come argomento.
list = ['larry', 'curly', 'moe'] list.append('shemp') ## append elem at end list.insert(0, 'xxx') ## insert elem at index 0 list.extend(['yyy', 'zzz']) ## add list of elems at end print(list) ## ['xxx', 'larry', 'curly', 'moe', 'shemp', 'yyy', 'zzz'] print(list.index('curly')) ## 2 list.remove('curly') ## search and remove that element list.pop(1) ## removes and returns 'larry' print(list) ## ['xxx', 'moe', 'shemp', 'yyy', 'zzz']
Errore comune: tieni presente che i metodi sopra riportati non *restituiscono* l'elenco modificato, ma modificano solo l'elenco originale.
list = [1, 2, 3] print(list.append(4)) ## NO, does not work, append() returns None ## Correct pattern: list.append(4) print(list) ## [1, 2, 3, 4]
Creazione elenco
Un pattern comune è iniziare un elenco come un elenco vuoto [], quindi utilizzare append() o extensions() per aggiungere elementi all'elenco:
list = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
Elenco sezioni
Le sezioni funzionano sugli elenchi come avviene per le stringhe e possono anche essere utilizzate per modificare le parti secondarie dell'elenco.
list = ['a', 'b', 'c', 'd'] print(list[1:-1]) ## ['b', 'c'] list[0:2] = 'z' ## replace ['a', 'b'] with ['z'] print(list) ## ['z', 'c', 'd']
Esercizio: list1.py
Per esercitarti con il materiale di questa sezione, prova i problemi in list1.py che non utilizzano l'ordinamento (negli Esercizi di base).