itertools
itertools fornece blocos de construção de iteradores rápidos e eficientes em memória - encadeamento, fatiamento, combinatória e agrupamento sem listas intermediárias.
Busque em todas as páginas da documentação
itertools fornece blocos de construção de iteradores rápidos e eficientes em memória - encadeamento, fatiamento, combinatória e agrupamento sem listas intermediárias.
from itertools import chain, islice, product
flat = chain([1, 2], [3, 4])
first_three = list(islice(range(10), 3))
pairs = list(product(["A", "B"], [1, 2]))Quando usar:
islice em um contador infinitofrom itertools import chain, groupby, islice, accumulate
def group_sorted(rows: list[tuple[str, int]]):
for key, group in groupby(rows, key=lambda r: r[0]):
yield key, sum(v for _, v in group)
def paginate(iterator, page_size: int):
page = 0
while True:
chunk = list(islice(iterator, page_size))
if not chunk:
break
yield page, chunk
page += 1
def running_totals(values):
return accumulate(values)
if __name__ == "__main__":
rows = [("a", 1), ("a", 2), ("b", 3)]
print(list(group_sorted(sorted(rows))))
print(list(paginate(iter(range(7)), 3)))
print(list(running_totals([1, 2, 3, 4])))O que isso demonstra:
groupby precisa ser ordenado pela mesma função de chave primeiroislice pega de qualquer iterador sem len()paginate para APIs de streamingaccumulate produz reduções correntes (soma padrão)| Função | Propósito |
|---|---|
chain | Concatenar iteráveis |
islice | Fatiar iterador |
groupby | Agrupamento consecutivo |
product | Produto cartesiano |
zip_longest | Empacotar comprimentos desiguais |
from itertools import pairwise # 3.10+
for a, b in pairwise([1, 2, 3]):
print(a, b)sorted(data, key=key) primeiro.product(count(), repeat=2) nunca termina. Correção: Limite com islice.chain aninhado.zip para no mais curto; zip_longest precisa de fillvalue para preenchimento.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| loops for aninhados | Dois iteráveis pequenos | Muitas combinações - itertools é mais claro |
| compreensões de lista | Materializar resultado pequeno | Grande produto cruzado |
| pandas groupby | Análise de DataFrame | Tuplas Python simples |
| more-itertools | Receitas extras (chunked) | Restrição de apenas biblioteca padrão |
groupby apenas agrupa chaves iguais adjacentes - a ordenação agrupa chaves iguais juntas.
islice funciona em iteradores sem acesso aleatório ou len().
chain para iteráveis conhecidos de uma vez; yield from para delegação de gerador com protocolo.
Preguiçoso - gera tuplas sob demanda. Materializar um produto enorme explode a memória.
accumulate(values, func=operator.mul) para produto corrente, etc.
stdlib 3.10+ - senão o padrão zip(items, items[1:]).
Como map, mas desempacota argumentos de tupla - starmap(pow, [(2,3), (3,2)]).
O oposto de filter - elementos onde o predicado é falso.
Precisa de duas passagens sobre o iterador sem armazenar tudo - paga memória de buffer.
combinations são subconjuntos insensíveis à ordem; permutations a ordem importa.
reduce relacionado a accumulategenexpCounter com iteráveisVersões do Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026