Possibile duplicato:
come si divide un elenco in blocchi di dimensioni uguali in Python?
Sono sorpreso di non essere riuscito a trovare una funzione "batch" che prenda come input un iterabile e restituisca un iterabile di iterabili.
Per esempio:
for i in batch(range(0,10), 1): print i
[0]
[1]
...
[9]
o:
for i in batch(range(0,10), 3): print i
[0,1,2]
[3,4,5]
[6,7,8]
[9]
Ora, ho scritto quello che pensavo fosse un generatore piuttosto semplice:
def batch(iterable, n = 1):
current_batch = []
for item in iterable:
current_batch.append(item)
if len(current_batch) == n:
yield current_batch
current_batch = []
if current_batch:
yield current_batch
Ma quanto sopra non mi dà quello che mi sarei aspettato:
for x in batch(range(0,10),3): print x
[0]
[0, 1]
[0, 1, 2]
[3]
[3, 4]
[3, 4, 5]
[6]
[6, 7]
[6, 7, 8]
[9]
Quindi, mi sono perso qualcosa e questo probabilmente mostra la mia completa mancanza di comprensione dei generatori Python. Qualcuno vorrebbe indicarmi la giusta direzione?
[Modifica: alla fine mi sono reso conto che il comportamento di cui sopra si verifica solo quando lo eseguo in ipython piuttosto che in python stesso]