¿Rendir varios objetos a la vez a partir de un objeto iterable?

¿Cómo puedo producir varios elementos a la vez de un objeto iterable?

Por ejemplo, con una secuencia de longitud arbitraria, ¿cómo puedo iterar a través de los elementos en la secuencia, en grupos de X elementos consecutivos por iteración?

Su pregunta es un poco vaga, pero eche un vistazo a la receta del grouper en la documentación de itertools .

 def grouper(n, iterable, fillvalue=None): "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" args = [iter(iterable)] * n return izip_longest(fillvalue=fillvalue, *args) 

(Comprimir el mismo iterador varias veces con [iter(iterable)]*n es un truco antiguo, pero encapsularlo en esta función evita el código confuso, y es la misma forma e interfaz que muchas personas usarán. Es una necesidad algo común. y es una pena que no esté en el módulo de itertools .)

Aquí hay otro enfoque que funciona en una versión anterior de Python que no tiene izip_longest:

 def grouper(n, seq): result = [] for x in seq: result.append(x) if len(result) >= n: yield tuple(result) del result[:] if result: yield tuple(result) 

Sin relleno, por lo que el último grupo puede tener menos de n elementos.