Itertools é uma das bibliotecas python mais interessantes. Ele contém uma série de funções inspiradas em linguagens funcionais usadas para trabalhar com iteradores.
Neste artigo vou citar alguns dos que mais me chamaram a atenção e que vale a pena ter em mente para não reinventar a roda todas as vezes.
Várias vezes eu implementei uma contagem infinita (bem, ela termina
explicitamente em algum ponto com uma pausa) usando um loop while True. itertools nos oferece uma alternativa melhor:
from itertools import count for i in count(start=2, step=2): if i > 10: break print(i)
2 4 6 8 10
Como pode ser visto no exemplo, se não fosse o break, count retornaria números infinitos. O código acima é aproximadamente equivalente a:
i = 2 while True: if i > 10: break print(i) i = 2
2 4 6 8 10
Uma função para fazer algo muito comum: obter dados de um fluxo em lotes de tamanho n. Vejamos um exemplo:
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,)
Ressalta-se que o último lote poderá ter tamanho menor ou igual a n, como neste caso. Muito útil, você não acha?
Outra função simples e útil. Dada uma sequência (na verdade, dado um iterador), ela nos dá seus elementos em pares.
Vamos ver melhor com um exemplo:
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
O número de pares é um a menos que o tamanho da sequência de entrada.
Finalmente, para esta breve entrada, quero falar sobre produto, um
implementação do produto cartesiano.
Útil para substituir um for aninhado que percorre dois fluxos de dados:
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
Recebe um parâmetro que nos permite fazer o produto cartesiano de um
sequência consigo mesmo:
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
Em um post futuro, mencionarei outras funções deste módulo útil
biblioteca padrão python. Espero que seja útil para você.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3