Altro
Come si fa a dividere una lista in pezzi di dimensioni uguali?
Ho una lista di lunghezza arbitraria, e ho bisogno di dividerla in pezzi di uguale dimensione e operare su di essa. Ci sono alcuni modi ovvi per farlo, come tenere un contatore e due liste, e quando la seconda lista si riempie, aggiungerla alla prima lista e svuotare la seconda lista per il prossimo giro di dati, ma questo è potenzialmente estremamente costoso.
Mi chiedevo se qualcuno avesse una buona soluzione per liste di qualsiasi lunghezza, ad esempio usando dei generatori.
Stavo cercando qualcosa di utile in itertools
, ma non ho trovato nulla di ovviamente utile. Potrebbe essermi sfuggito, però.
Domanda correlata: Qual è il modo più "pitonico" per iterare su una lista a blocchi?
2047
3
Ecco un generatore che produce i pezzi che vuoi:
Se state usando Python 2, dovreste usare
xrange()
invece dirange()
:Inoltre potete semplicemente usare la comprensione della lista invece di scrivere una funzione, anche se è una buona idea incapsulare operazioni come questa in funzioni con nome in modo che il vostro codice sia più facile da capire. Python 3:
Versione Python 2:
Ecco un generatore che lavora su iterabili arbitrari:
Esempio:
Se conosci le dimensioni della lista:
Se non lo sai (un iteratore):
In quest'ultimo caso, può essere riformulato in un modo più bello se si può essere sicuri che la sequenza contiene sempre un numero intero di pezzi di una data dimensione (cioè non c'è un ultimo pezzo incompleto).