Descubriendo itertools

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 q…


This content originally appeared on DEV Community and was authored by Johnnatan Sandoval Cardona

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.

Count

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

batched

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?

pairwise

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.

product

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.


This content originally appeared on DEV Community and was authored by Johnnatan Sandoval Cardona


Print Share Comment Cite Upload Translate Updates
APA

Johnnatan Sandoval Cardona | Sciencx (2024-09-03T02:07:05+00:00) Descubriendo itertools. Retrieved from https://www.scien.cx/2024/09/03/descubriendo-itertools/

MLA
" » Descubriendo itertools." Johnnatan Sandoval Cardona | Sciencx - Tuesday September 3, 2024, https://www.scien.cx/2024/09/03/descubriendo-itertools/
HARVARD
Johnnatan Sandoval Cardona | Sciencx Tuesday September 3, 2024 » Descubriendo itertools., viewed ,<https://www.scien.cx/2024/09/03/descubriendo-itertools/>
VANCOUVER
Johnnatan Sandoval Cardona | Sciencx - » Descubriendo itertools. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/09/03/descubriendo-itertools/
CHICAGO
" » Descubriendo itertools." Johnnatan Sandoval Cardona | Sciencx - Accessed . https://www.scien.cx/2024/09/03/descubriendo-itertools/
IEEE
" » Descubriendo itertools." Johnnatan Sandoval Cardona | Sciencx [Online]. Available: https://www.scien.cx/2024/09/03/descubriendo-itertools/. [Accessed: ]
rf:citation
» Descubriendo itertools | Johnnatan Sandoval Cardona | Sciencx | https://www.scien.cx/2024/09/03/descubriendo-itertools/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.