← Volver

Cómo recorrer un objeto iterable en grupos o bloques

El bucle for permite recorrer los elementos de un objeto iterable uno a la vez:

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for n in numeros:
print(n)

Usando la función batched(), se puede recorrer de a dos o más elementos:

# par recibe una tupla de dos elementos.
for par in batched(numeros, 2):
print(par)

Esto imprime:

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


Otro ejemplo:

Si el número de elementos del objeto recorrido no es múltiplo del segundo argumento, entonces en la última iteración se recibe una tupla con menos elementos:

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
for par in batched(numeros, 2):
print(par)

Salida:

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


Para recorrer de a tres elementos:

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
for triplete in batched(numeros, 3):
print(triplete)

Salida:

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


Código de la función (forma parte de las recetas de Python):

from itertools import islice

def batched(iterable, n):
"Batch data into tuples of length n. The last batch may be shorter."
# batched('ABCDEFG', 3) --> ABC DEF G
if n < 1:
raise ValueError('n must be at least one')
it = iter(iterable)
while (batch := tuple(islice(it, n))):
yield batch

iteradores iterables bucles listas tuplas diccionarios


👨‍💻 ¡Ya lanzamos el curso oficial de Recursos Python en Udemy! Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter en 2024.

🐍 También te puede interesar:


💡 Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.