Dividi lista in blocchi in Python

Azaz Farooq 18 luglio 2021
  1. Dividi la lista in Python in blocchi usando il metodo di comprensione della lista
  2. Dividi la lista in Python in blocchi usando il metodo itertools
  3. Dividi la lista in Python in blocchi usando la funzione lambda
  4. Dividi la lista in Python in blocchi usando il metodo lambda e islice
  5. Dividi la lista in Python in blocchi usando il metodo NumPy
  6. Dividi lista in blocchi in Python utilizzando una funzione definita dall’utente
Dividi lista in blocchi in Python

Una delle strutture dati Python che possono contenere valori o elementi misti al suo interno è chiamata liste. Questo articolo introdurrà vari modi per dividere una lista in blocchi. Puoi utilizzare qualsiasi esempio di codice che soddisfi le tue specifiche.

Dividi la lista in Python in blocchi usando il metodo di comprensione della lista

Possiamo usare la comprensione delle liste per dividere una lista Python in blocchi. È un modo efficiente per incapsulare le operazioni per rendere il codice più facile da capire.

Di seguito viene fornito il codice di esempio completo.

test_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]

n = 3

output = [test_list[i : i + n] for i in range(0, len(test_list), n)]
print(output)

Produzione:

[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9'], ['10']]

range(0, len(test_list), n) restituisce un intervallo di numeri che iniziano da 0 e terminano in len(test_list) con un passo di n. Ad esempio, range(0, 10, 3) restituirà (0, 3, 6, 9).

test_list[i:i + n] ottiene la parte della lista che inizia con l’indice i e finisce esclusivamente con i + n. L’ultimo pezzo della lista suddivisa è test_list[9], ma gli indici calcolati test_list[9:12] non solleveranno un errore ma saranno uguali a test_list[9].

Dividi la lista in Python in blocchi usando il metodo itertools

Questo metodo fornisce un generatore che deve essere iterato utilizzando un cicli for. Un generatore è un modo efficiente per descrivere un iteratore.

from itertools import zip_longest

test_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]


def group_elements(n, iterable, padvalue="x"):
    return zip_longest(*[iter(iterable)] * n, fillvalue=padvalue)


for output in group_elements(3, test_list):
    print(output)

Produzione:

('1', '2', '3')
('4', '5', '6')
('7', '8', '9')
('10', 'x', 'x')

[iter(iterable)]*n genera un iteratore e ripetuto n volte nell’lista. Un round robin di ogni iteratore viene quindi effettivamente eseguito da izip-longest; poiché questo è un iteratore simile, ciascuna di queste chiamate è avanzata, con il risultato che ciascuna di tali zip-round-robin produce una tupla di n oggetti.

Dividi la lista in Python in blocchi usando la funzione lambda

È possibile utilizzare una funzione di base lambda per dividere l’lista in una certa dimensione o in blocchi più piccoli. Questa funzione funziona sulla lista originale e sulla variabile di dimensione N, itera su tutti gli elementi della lista e la divide in blocchi di dimensione N.

Di seguito viene fornito il codice di esempio completo:

test_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]

x = 3


def final_list(test_list, x):
    return [test_list[i : i + x] for i in range(0, len(test_list), x)]


output = final_list(test_list, x)

print("The Final List is:", output)

Produzione:

The Final List is: [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9'], ['10']]

Dividi la lista in Python in blocchi usando il metodo lambda e islice

Una funzione lambda può essere utilizzata con la funzione islice e produrre un generatore che itera sulla lista. La funzione islice crea un iteratore che estrae gli elementi selezionati dall’iterabile. Se l’inizio è diverso da zero, gli elementi iterabili verranno saltati prima che venga raggiunto l’inizio. Gli elementi vengono quindi restituiti consecutivamente a meno che non venga impostato un passaggio superiore a quello che comporta il salto di elementi.

Di seguito viene fornito il codice di esempio completo:

from itertools import islice

test_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]


def group_elements(lst, chunk_size):
    lst = iter(lst)
    return iter(lambda: tuple(islice(lst, chunk_size)), ())


for new_list in group_elements(test_list, 3):
    print(new_list)

Produzione:

('1', '2', '3')
('4', '5', '6')
('7', '8', '9')
('10',)

Dividi la lista in Python in blocchi usando il metodo NumPy

La libreria NumPy può anche essere utilizzata per dividere l’lista in blocchi di dimensioni N. La funzione array_split() divide l’array in sotto-array di dimensioni specifiche n.

Di seguito viene fornito il codice di esempio completo:

import numpy

n = numpy.arange(11)

final_list = numpy.array_split(n, 4)
print("The Final List is:", final_list)

La funzione arange ordina i valori secondo l’argomento dato e la funzione array_split() produce la lista / sotto-array in base al parametro dato in essa come parametro.

Produzione:

The Final List is: [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8]), array([ 9, 10])]

Dividi lista in blocchi in Python utilizzando una funzione definita dall’utente

Questo metodo itera sulla lista e produce blocchi consecutivi di dimensioni n dove n si riferisce al numero in corrispondenza del quale è necessario implementare una divisione. In questa funzione viene utilizzata una parola chiave yield che consente di arrestare e ripristinare una funzione quando il valore cambia quando l’esecuzione viene sospesa. Questa è la distinzione importante da una funzione normale. Una funzione normale non può tornare al punto in cui era stata interrotta. La funzione è chiamata Generatore quando usiamo un’istruzione yield in una funzione. Un generatore produce o restituisce valori e non può essere denominato come una semplice funzione, ma piuttosto come un iterabile, cioè utilizzando un bucle.

Il codice di esempio completo è il seguente.

test_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]


def split_list(lst, n):
    for i in range(0, len(lst), n):
        yield lst[i : i + n]


n = 3

output = list(split_list(test_list, n))
print(output)

Produzione:

[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9'], ['10']]

Articolo correlato - Python List