Corso
Le liste sono strutture dati integrate in Python che memorizzano elementi eterogenei e consentono di accedervi in modo efficiente. Il compito di dividere le liste in blocchi di dimensione N è una pratica diffusa quando c’è un limite al numero di elementi che il tuo programma può gestire in una singola richiesta.
Liste
Le liste sono strutture dati che possono contenere al proprio interno valori o elementi di tipi diversi. Esempi di elementi sono interi, float, stringhe, ecc. Le liste sono mutabili, il che significa che puoi modificarne il contenuto senza cambiarne l’identità. Si scrivono con parentesi quadre [ ] e gli elementi al loro interno sono separati da una virgola (,). Creiamo una lista di numeri su cui lavorare...
# Creating a list of 95 numbers
list_numbers = list(range(1, 96))
print(list_numbers)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95]
La funzione range() genera una lista di numeri. Ha la forma: range([start], stop[, step]), dove "start" e "step" sono parametri facoltativi. start è il numero iniziale della sequenza, stop è il numero fino al quale vengono generati i valori, ma non incluso. step è la differenza tra ciascun numero nella sequenza. Questa funzione è indicizzata da 0, il che significa che gli indici della lista partono da 0, non da 1, quando lo start non è specificato.
Ora, supponiamo che tu debba suddividere la lista in liste più piccole, ognuna con 5 elementi.
Un modo per farlo è definire un generatore. Un generatore è un modo elegante per definire un iteratore. Cos’è un iteratore, ti chiedi? In parole semplici, un iteratore è un oggetto che sa come calcolare e restituire l’elemento successivo dell’oggetto che stai iterando. Puoi leggere di più su iteratori e generatori nel tutorial sugli iteratori in Python di DataCamp.
Definiamo una funzione che contiene il generatore che fa effettivamente il lavoro per noi.
# Yields successive 'n' sized chunks from list 'list_name'
def create_chunks(list_name, n):
for i in range(0, len(list_name), n):
yield list_name[i:i + n]
# Call the 'create_chunks' function to divide the list further into sub-lists of 10 items each
print(list(create_chunks(list_numbers, 10)))
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 66, 67, 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90], [91, 92, 93, 94, 95]]
Un altro modo per ottenere lo stesso risultato è usare semplicemente la list comprehension. Puoi approfondire nel tutorial sulla list comprehension in Python di DataCamp.
print([list_numbers[i: i+10] for i in range(0, len(list_numbers), 10)])
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 66, 67, 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90], [91, 92, 93, 94, 95]]
Man mano che il problema si complica, le espressioni di list comprehension possono diventare sempre più difficili da capire e da debug. Per questo, scrivere una funzione pulita come quella con il generatore può essere più utile e facile da gestire.
In questo tutorial hai visto due modi per risolvere un problema piuttosto frequente quando si lavora con le liste. Dai un’occhiata al corso Data Types for Data Science di DataCamp.

