Itertois Python-Funções que criam Iteradores para um looping eficiente.
Indhumathy Chelliah
Follow
7 de Julho, 2020 – 6 min ler
figcaption>Foto by Aaron Burden on Unsplash
P>Python Itertools:
Este módulo padroniza um conjunto central de ferramentas rápidas e eficientes em termos de memória que são úteis por si só ou em combinação. Juntos, formam um "iterator algebra”
tornando possível construir ferramentas especializadas de forma sucinta e eficiente em Python puro. O módulo Python Itertools está disponível na Biblioteca Standard Python.
Tipos de iteradores fornecidos por este módulo:
Iteradores infinitos
Iteradores terminando na sequência de entrada mais curta
Iteradorescombinatórios
Tipos de retorno serão objecto de Iterador.Podemos iterar através do iterador por
utilizar a função next()
utilizar para loop
converter para listar objectos utilizando lista()
Iteradores infinitos: count(),cycle(),repeat()
count(): Faz um iterador que retorna valores uniformemente espaçados começando com o número especificado no argumento start.Por defeito, o início é 0 e o passo é 1.O passo também pode ser valores não inteiros. Esta função retorna um iterador infinito.
itertools.count(start=0,step=1)
É também usado como argumento na função map() e zip().
zip()
-zip() é uma função Python incorporada que permite combinar elementos correspondentes de múltiplas sequências e retornar objecto zip que é iterador de tuplos. itertools.count()
pode ser usado como sequência na função zip().
map()
A função Python map() é utilizada para aplicar a função em todos os elementos do iterável especificado e retorna um objecto de mapa que é um iterador. Podemos usar itertools.count() como argumento na função map() .
2. cycle(): Faz um iterador devolver elementos do iterável e guardar uma cópia de cada um.Quando o iterável se esgota, devolve o elemento da cópia guardada. Repete indefinidamente.
itertools.cycle(iterable)
3.repeat(): Faz um iterador que devolve objecto vezes sem conta. Funciona indefinidamente a menos que se mencione o argumento do tempo. Usado como argumento no mapa() e na função zip().
itertools.repeat(object,times)
É usado como argumento na função map().
É usado como argumento na função zip().
Iteradores que terminam na sequência de entrada mais curta:
acumular(): Faz um iterador que devolve a soma acumulada ou os resultados acumulados de outras funções binárias que é mencionado no parâmetro func. Númerosualmente de elementos na saída iterável corresponde ao número de elementos na entrada iterável. Se o parâmetro inicial for mencionado, é acumulado, pelo que a saída iterável contém mais um elemento do que a entrada iterável.functools.reduce()
devolve apenas o valor final acumulado para função semelhante. parâmetro inicial é introduzido em Python version 3.8
itertools.accumulate(iterable,func,*,initial=None)
2. chain(): Faz um iterador que devolve o elemento desde o primeiro iterável até ao seu esgotamento, depois prossegue para o iterável seguinte. Tratará sequências consecutivas como uma única sequência.itertools.chain(*iterables)
3. chain.from_iterable(): Esta função toma um iterável como argumento de entrada e devolve iterável achatado contendo todos os elementos do iterável de entrada. Todos os elementos no input iterável devem ser iteráveis, caso contrário, irá elevar o TypeError.
chain.from_iterable(iterable)
4. compress(): Faça um iterador que filtra elementos dos dados devolvendo apenas aqueles que têm um elemento correspondente em selectores que avaliam para True.Pára quando os dados ou selectores de iterables tiverem sido esgotados.
itertools.compress(data,selectors)
5.dropwhile(): Faça um iterador que deixa cair elementos do iterável desde que o predicado seja Verdadeiro,depois devolve cada elemento. O iterador não produz qualquer saída até que o predicado se torne Falso primeiro.
itertools.dropwhile(predicate,iterable)
6.takewhile(): Faça um iterador que devolve elementos do iterável desde que o predicado seja Verdadeiro.
itertools.takewhile(predicate,iterable)
7. filterfalse(): Faça um iterador que filtre elementos do iterável devolvendo apenas aqueles para os quais o predicado é Falso.Se o predicado for Nenhum,devolve itens que são Falso.filter()
método retorna um iterador que contém elementos de um iterável para o qual a função retorna Verdadeiro.
itertools.filterfalse(predicate,iterables)
8.zip_longest(): Faz um iterador que agrega elementos de cada um dos iterables. Se os iterables forem de comprimento desigual, o valor em falta é preenchido com fillvalue. A iteração continua até se esgotar a maior iterabilidade. Em zip(),a iteração continua até se esgotar a menor iterabilidade.
itertools.zip_longest(*iterables,fillvalue=None)
9. starmap(): Faça um iterador que calcule a função usando argumentos obtidos a partir do iterável. Usado em vez de mapa() quando os parâmetros do argumento já estão agrupados em tuplos a partir de um único iterável (os dados foram “pré-zipados”).
itertools.starmap(function,iterable)
10. islice(): Faz um iterador que devolve elementos seleccionados do iterável. Se o início é None
, então a iteração começa em zero. Se o passo for None
, então o passo por defeito é None
, então a iteração continua até o iterador se esgotar; caso contrário, pára na posição especificada. islice()
não suporta valores negativos para início,paragem e passo.
itertools.islice(iterable,stop) itertools.islice(iterable, start, stop)
11.tee(): Retornar n iteradores independentes a partir de um único iterável.
itertools.tee(iterable,n=2)
div>
12. groupby(): Faça um iterador que retorna chaves e grupos consecutivos a partir do iterável. key é um valor de chave de cálculo de função para cada elemento.Se a chave não for especificada ou Nenhuma, a chave não tem uma função de identidade e devolve o elemento inalterado.
itertools.groupby(iterable,key=None)
div>>
Iteradores Combinatórios:
produto(): Produto cartesiano de iterables de entrada. Definição cartesiana de produto: O produto do conjunto X e conjunto Y é o conjunto que contém todos os pares encomendados ( x, y ) para o qual x pertence a X e y pertence a Y. Para calcular o produto de um iterável consigo mesmo, especificar o número de repetições com o argumento opcional da repetição de palavras-chave. Por exemplo, produto(A, repeat=4) significa o mesmo que produto(A, A, A, A).
itertools.product(*iterables,repeat)
2. permutações(): Return successive r
permutações de comprimento dos elementos no iterável. Se r não for especificado ou não for nenhum,então r não tem o comprimento do iterável e são geradas todas as permutações possíveis de comprimento total. Os tufos permutáveis são emitidos em ordem lexicográfica de acordo com a ordem do iterável de entrada. Assim, se a iterabilidade de entrada for ordenada, os tufos combinados serão produzidos em ordem ordenada.
Elementos são tratados como únicos com base na sua posição, e não no seu valor. Assim, se os elementos de entrada forem únicos, não haverá valores repetidos em cada permutação.
itertools.permutations(iterable,r=None)
Nota:Em Permutações,a ordem dos elementos importa.
3. combinações(): Return r
comprimento subsequences of elements from the input iterable.
As combinações de tufos são emitidas em ordem lexicográfica de acordo com a ordem da iterabilidade de entrada. Assim, se a iterabilidade de entrada for ordenada, os tufos combinados serão produzidos por ordem ordenada.
A ordenação lexicográfica significa forma de ordenação das palavras em ordem alfabética das suas letras componentes.
Os elementos são tratados como únicos com base na sua posição, não no seu valor. Assim, se os elementos de entrada forem únicos, não haverá valores de repetição em cada combinação.
itertools.combinations(iterable, r)
4. combinations_with_replacement(): Return r
comprimento subsequences of elements from the input iterable permitindo que os elementos individuais sejam repetidos mais de uma vez.
itertools.combinations_with_replacement(iterable, r)
Note: 1. Used as an argument in map() and zip(): count(),repeat() repeat()- supply stream of constant values to map() or zip() function. count()-it will supply different values to map() or zip() function.2.Difference between cycle() and repeat(): cycle()-iterates over the same object again and again repeat()-returns the same object again and again.3.Difference between reduce() and itertools.accumulate(): reduce(): * It will return only the final accumulated value. * First argument should be function and second argument should be iterable. accumulate() * It will return the running accumulated value.The elements in the output iterable will be equal to elements in the input iterable,if initial value is not mentioned. * First argument should be iterable and second argument should be function.4.Difference between filter() and itertools.compress(): * filter()function-filters the given iterable with the help of function that test each element in the iterable is True or not. * compress():filters the given iterable based on the corresponding element in the selector. Iterable containing True /False is given as selector.5.Difference between filter() and itertools.filterfalse(): *filter():Construct an iterator from the elements of iterable for which function returns True. *filterfalse():Construct an iterator from the elements of iterable for which function returns False.6.Difference between zip() and itertools.zip_longest(): *zip():Iteration continues until shortest iterable is exhausted. *zip_longest():Iteration continues until longest iterable is exhausted.7.Difference between list slicing and itertools.islice(): *List slicing creates new list *islice()-Returns an iterator.We can loop through the iterator,in the way we want. 8.Difference between itertools.permutations() and itertools.combinations(): * itertools.permutations():Order of the elements does matters. *itertools.combinations():Order of the elements doesn’t matters. Both combinations and permutations doesn’t repeat values. 9.Difference between itertools.combinations() and itertools.combinations_with_replacement * combinations():Order of element doesn’t matters and doesn’t repeat values. * combinations_with_replacement():Order of element doesn’t matters and it repeats values.10.Difference between itertools.takewhile() and itertools.dropwhile(): * takewhile():Make an iterator that returns element from the iterable as long as the predicate is True. * dropwhile():Make an iterator that drops element from the iterable as long as the predicate is True afterwards returns every element.