Itertools es una de las librerías más interesantes de python. Contiene una serie de funciones inspiradas en lenguajes funcionales que sirven para trabajar con iteradores.
En este artículo mencionaré alguna de las que más me han llamado la atención y que vale la pena tener presentes para no reinventar la rueda cada vez.
Varias veces he implementado un conteo infinito (bueno, que termina
explícitamente en algún momento con un break) usando un ciclo while True. itertools nos ofrece una mejor alternativa:
from itertools import count for i in count(start=2, step=2): if i > 10: break print(i)
2 4 6 8 10
Como puede verse en el ejemplo, de no ser por el break, count retornaría infinitos números. El código anterior es más o menos equivalente a:
i = 2 while True: if i > 10: break print(i) i = 2
2 4 6 8 10
Una función para realizar algo muy común: obtener datos de una secuencia en lotes de tamaño n. Veamos un ejemplo:
from itertools import batched sequence = [1, 2, 3, 4, 5, 6, 7] for batch in batched(sequence, 2): # lotes de tamaño 2 print(batch)
(1, 2) (3, 4) (5, 6) (7,)
Es de notar que el último lote puede ser de un tamaño menor o igual a n, como en este caso. Bastante útil, ¿no creen?
Otra función sencilla y útil. Dada una secuencia (en realidad, dado un iterador), nos entrega sus elementos en pares.
Veámoslo mejor con un ejemplo:
from itertools import pairwise sequence = [1, 2, 3, 4, 5, 6, 7] for a, b in pairwise(sequence): print(a, b)
1 2 2 3 3 4 4 5 5 6 6 7
La cantidad de parejas es una menos que el tamaño de la secuencia de entrada.
Finalmente, para esta corta entrada, quiero hablar de product, una
implementación del producto cartesiano.
Útil para reemplazar un for anidado que recorra dos secuencia de datos:
from itertools import product A = [1, 2, 3] B = [5, 6, 7] for a, b in product(A, B): print(a, b)
1 5 1 6 1 7 2 5 2 6 2 7 3 5 3 6 3 7
Recibe un parámetro que nos permite realizar el producto cartesiano de una
secuencia consigo misma:
from itertools import product A = [1, 2, 3] for a1, a2, a3 in product(A, repeat=3): print(a1, a2, a3)
1 1 1 1 1 2 1 1 3 1 2 1 1 2 2 1 2 3 1 3 1 1 3 2 1 3 3 2 1 1 2 1 2 2 1 3 2 2 1 2 2 2 2 2 3 2 3 1 2 3 2 2 3 3 3 1 1 3 1 2 3 1 3 3 2 1 3 2 2 3 2 3 3 3 1 3 3 2 3 3 3
En una próxima entrada, mencionaré otras funciones más de este útil módulo de
librería estándar de python. Espero les sea de utilidad.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3