Pitão

Iteradores em Python

Iteradores em Python
Um iterador é uma ferramenta valiosa para Python. É um objeto usado para iterar todos os elementos de uma coleção. Iterator dá acesso aos elementos de um contêiner, mas não faz a iteração por conta própria. Ele funciona como um cursor de banco de dados e é usado para ler a lista de registros um por um. Por exemplo, um 'para'loop que itera os valores de um contêiner funciona como um iterador. Python tem muitos iteradores embutidos para objetos iteráveis, como listas, tuplas, dicionários, etc. Sem esses iteradores, 'itertools'podem ser usadas para retornar outros iteradores em Python. Este artigo mostra como usar o loop como um iterador, iterador personalizado, iterador infinito e iterador infinito de controle em Python 3. Alguns usos do 'itertools'funções também são explicadas na última parte deste tutorial.

Métodos Iterator

Cada objeto iterador contém os dois métodos a seguir.

Este método é usado para inicializar o objeto iterável. O objeto retornado tem o método '_ _Next_ _()'em Python 3.

Este método retorna o próximo valor do objeto iterável. O relacionamento entre o iterador e o objeto iterável é mostrado no diagrama a seguir.

Iterando com Loops

Foi mencionado anteriormente que o 'para'loop chama o'Next()'método implicitamente ao iterar qualquer objeto iterável. Quando um loop é usado para iterar um objeto iterável, o 'para'loop chama o'Next()'método implicitamente e o'enquanto'loop chama o'Next()' ou '__Next__()'método explicitamente para ler o próximo valor do objeto iterável. Ambos os tipos de loop continuam a chamar este método até que o 'StopIteration'sinal é gerado.

Exemplo 1: Iterando Objetos Iteráveis ​​com Loop 'for'

O script a seguir mostra o uso de 'para'loops para iterar cinco objetos iteráveis ​​diferentes. O primeiro 'para'loopéusado para iterar o valor da string e imprimir cada caractere da string em cada iteração. O segundo 'para'loopéusado para iterar o conteúdo de um arquivo de texto existente e imprimir cada linha do arquivo em cada iteração. O terceiro 'para'loop é usado para iterar os valores de uma tupla. O quarto 'para'loop é usado para iterar os valores contidos em uma lista. O quinto 'para'loop é usado para iterar os valores contidos em um dicionário.

# Iterando uma String usando o loop for
print ("Iteração de String usando loop for")
str = "Python"
para val em str:
imprimir (val)
# Iterando um arquivo existente usando o loop for
print ("\ n \ nLendo um arquivo linha por linha usando for loop")
para linha em aberto ("teste.TXT"):
imprimir (linha, fim = "")
# # Iterando uma tupla usando loop for
print ("\ n \ nIteração dupla usando loop for")
tup = ("Livro", "Papel", "Lápis", "Caneta")
para val in tup:
imprimir (val)
# Iterando uma lista usando o loop for
print ("\ n \ nLista de iteração usando loop for")
listdata = ["Designer", "Analista", "Programador", "Administrador"]
para val em listdata:
imprimir (val)
# Iterando um dicionário usando loop for
imprimir ("\ n \ nIteração de dicionário usando loop for")
dictval = 'Meher': 95, 'Sakib': 97, 'Akhi': 70, 'Fiaz': 78
para índice em dictval:
imprimir ("% s alcançou% d marcas"% (índice, dictval [índice]))

Resultado

A saída a seguir mostra que os caracteres do valor da string; as linhas do teste.TXT Arquivo; e os itens das tuplas, lista e dicionário são impressos após a execução do script.

Exemplo 2: Iterando listas com loop 'while'

O script a seguir mostra o uso de um 'enquanto'loop para iterar uma lista de dados. Aqui o 'iter ()'método é usado para inicializar o objeto iterável, e o'Next()'método é usado para ler o próximo valor do objeto iterável. StopIteration sinal é usado para terminar do infinito 'enquanto' loop quando nenhum item da lista sobrou para leitura.

# Defina uma lista
listdata = ['google.com ',' bing.com ',' yahoo.com ',' baidu.com ',' duckduckgo.com ']
# Inicialize o objeto iterável
init_iter_object = iter (listdata)
print ("Iterando dados da Lista usando loop while: \ n")
# Declare e infinito while loop
enquanto verdadeiro:
tentar:
# método next () é usado para iterar o próximo valor
valor = próximo (init_iter_object)
imprimir (valor)
exceto StopIteration:
# Termina do loop após iterar todos os valores
pausa

Resultado

A saída a seguir mostra que cada valor da lista foi impresso em cada linha usando o 'Next()'método depois de executar o script.

Exemplo 3: Iterando uma tupla com o método '__next __ ()' e loop 'while'

No script a seguir, ambos 'Next()' e '__Next__()'métodos são usados ​​para iterar os valores de uma tupla. O 'iter ()'método é usado para criar o objeto iterável, chamado'init_iter.' Aqui o 'Next()'método é chamado duas vezes para imprimir os primeiros dois valores da tupla. Em seguida, um infinito 'enquanto'loop é usado para iterar os valores restantes da tupla e o'StopIteration'sinal é usado para terminar o loop, como no exemplo anterior.

# define uma tupla
animal_tuple = ('Pássaro', 'Leão', 'Macaco', 'Cobra', 'Elefante')
print ("Os valores da tupla são: \ n")
# Inicialize um objeto iterador usando iter ()
init_iter = iter (animal_tuple)
# iterar e imprimir o valor usando o método next ()
imprimir (próximo (init_iter))
imprimir (próximo (init_iter))
# Defina um loop while infinito
enquanto verdadeiro:
tentar:
# iterar e imprimir o valor usando o método __next __ ()
imprimir (init_iter.__Next__())
exceto StopIteration:
# Termina do loop após iterar todos os valores
pausa

Resultado

A saída a seguir mostra que depois de executar o script, os dois primeiros valores, 'Pássaro' e 'Leão,'são impressos com'Next()'método, enquanto os outros três valores,'Macaco,"Cobra,' e 'Elefante,'são impressos com'__Next__()'método.

Iterando com um Iterador Personalizado

Esta seção mostra como diferentes tipos de iteradores personalizados podem ser implementados criando classes. Tanto o '__iter __ ()' e a '__Next__()'métodos serão implementados em uma classe, e o'enquanto'loop será usado para iterar os valores do objeto iterável.  A próxima parte deste artigo também mostrará como criar um iterador personalizado infinito e controlar a iteração.

Exemplo 4: Uso de um Iterador Personalizado Simples

O script a seguir permite calcular o valor de xn usando um iterador personalizado sem usar nenhuma função integrada do Python. A classe chamada 'x_to_the_power_n'é declarado no script. O '__iniciar__()'método da classe irá inicializar os valores de x e n que será usado no momento da criação do objeto. O '__iter __ ()'método irá inicializar a variável de classe, que irá armazenar o'resultado'variável do cálculo em cada iteração. Os valores de x e n será tomado como entrada do usuário. Um objeto da aula 'números'é criado com x e n. Em seguida, um objeto iterável denominado 'iter_obj'é criado para chamar o'__Next__()'método para n-1 vezes usando o 'enquanto'loop para calcular o valor de xn. Em cada iteração, o valor de x será multiplicado pelo valor anterior de 'resultado' variável. Depois de encerrar o 'enquanto'loop, o'__Next__()'método será chamado novamente para imprimir o valor de xn.

"Crie uma classe para calcular o
x elevado à potência n usando iterador
"
classe x_to_the_power_n:
# Inicialize o valor de x e n
def __init __ (self, x = 0, n = 0):
auto.x = x
auto.n = n
# Inicialize o iterável
def __iter __ (self):
auto.resultado = 1
retornar a si mesmo
# Calcule o valor em cada iteração
def __next __ (self):
se eu.n> = 0:
auto.resultado * = self.x
auto.n - = 1
retornar a si mesmo.resultado
# Pegue os valores de x e n
x = int (input ("Insira o valor de x:"))
n = int (input ("Insira o valor de n:"))
# Crie um objeto da classe
números = x_para_a_potência_n (x, n)
# Crie um iterável
iter_obj = iter (números)
tentar:
i = 0
enquanto eu < n-1):
# Recupere o próximo valor usando o método next ()
próximo (iter_obj)
i + = 1
print ("\ n% d à potência% d é% d"% (x, n, iter_obj.__Next__()))
exceto StopIteration:
# Terminar do script se nenhum valor existir
imprimir (próximo (iter_obj))

Resultado

A seguinte saída mostra que 2 é tomado como o valor de x e 4 é tomado como o valor de n. Então, o script calculou o valor de 2ser 16.

Exemplo 5: Uso de um Iterador Personalizado Infinito

O seguinte script imprimirá continuamente os números que são divisíveis por 5 com um atraso de um segundo até que o usuário pressione Ctrl + C para gerar o 'KeyboardInterrupt'sinal. O infinito 'enquanto'loop é usado aqui para criar um iterador personalizado infinito. O 'Tempo'módulo é importado no início do script para usar o'dormir()'método para atrasar cada saída por um segundo. O número 5 é inicializado com o 'num'variável como o primeiro número divisível no script, e o próximo número é gerado adicionando 5 com o valor anterior de'num' variável.

# Módulo de tempo de importação
tempo de importação
"
Crie uma classe para gerar os números
que são divisíveis por 5 continuamente
"
classe Number_Divisible_by_five:
# Inicializa o valor de num
def __iter __ (self):
auto.num = 5
retornar a si mesmo
# Calcule o próximo número que é divisível por 5
def __next __ (self):
next_num = self.num
Tempo.dormir (1)
auto.num + = 5
retornar next_num
# Crie um objeto da classe
Object = Number_Divisible_by_five ()
# Crie um objeto iterável
iterObject = iter (Object)
# Definir loop infinito
enquanto verdadeiro:
tentar:
# Vá para a próxima iteração
imprimir (iterObject.__Next__())
exceto KeyboardInterrupt:
imprimir ("Ctrl + C é pressionado.")
# Termina do loop quando Ctrl + C é pressionado
pausa

Resultado

O resultado a seguir mostra que o número começou a ser impresso a partir de 5 e imprimiu continuamente os próximos números um após o outro com a duração de um segundo. Quando o usuário pressionou Ctrl + C depois de imprimir o número 60, a mensagem 'Ctrl + C é pressionado.'foi impresso, antes de encerrar o script.

Exemplo 6: controlando um iterador infinito personalizado

O script a seguir mostra como parar o iterador infinito personalizado após completar um número especificado de iterações. O '__iter __ ()'método da classe irá inicializar os valores do'n' e 'resultado'variáveis ​​de classe. O script irá calcular os quadrados dos números, começando com 1, que são armazenados na variável n, e imprimir o valor quadrado de n até o valor de n é melhor que 5. Um loop while infinito é declarado aqui para chamar o '__Next__()'método para imprimir o valor quadrado de n. Quando o valor de n alcança 6, a 'StopIteration'sinal irá gerar para encerrar o loop.

# Módulo de tempo de importação
tempo de importação
"
Crie uma classe para calcular
o quadrado do número começa de 1 até
o valor do número é menor que 6
"
classe calcule_power:
# Inicializa o valor de num
def __iter __ (self):
auto.n = 1
auto.resultado = 0
retornar a si mesmo
# Calcule o próximo número que é divisível por 5
def __next __ (self):
# Verifique se o valor de n é menor ou igual a 5 ou não
se eu.n <= 5:
auto.resultado = self.n ** 2
Tempo.dormir (0.5)
auto.n + = 1
retornar a si mesmo.resultado
senão:
aumentar StopIteration
# Crie um objeto da classe
Objeto = calcular_power ()
# Crie um objeto iterável
iterObject = iter (Object)
# Definir loop infinito
enquanto verdadeiro:
tentar:
# Vá para a próxima iteração e imprima o valor quadrado
print ("O quadrado de% d é% d"% (iterObject.n, iterObject.__Next__()))
exceto StopIteration:
print ("\ n Terminado do loop.")
# Terminar do loop
pausa

Resultado

A saída a seguir mostra que o iterador personalizado infinito foi encerrado quando o valor de n tornou-se maior que 5. O script calculou e imprimiu os valores quadrados dos valores numéricos de 1 a 5.

Iterando com itertools

Python tem um módulo integrado chamado 'itertools'que pode ser usado para criar um iterador para iterar dados usando um loop. A próxima seção deste artigo mostra como usar três funções neste módulo.

itertools.contar()

O 'itertools.contA função 'pode ser usada com o'mapa()'método para gerar dados sequenciais e com o'fecho eclair()'método para adicionar sequências usando o parâmetro de contagem deste método. A sintaxe desta função é dada abaixo.

Sintaxe

itertools.contagem (início = 0, etapa = 1)

Aqui, o primeiro parâmetro, 'começar,'é usado para definir o valor inicial da sequência, e 0 é o valor padrão deste parâmetro. O segundo parâmetro, 'Passo,'é usado para definir a diferença entre os números consecutivos, e 1 é o valor padrão deste parâmetro.

Exemplo 7: Uso da função count () de itertools

O seguinte script irá calcular a soma de 0 para n números, onde o valor de n será tirado do usuário. O 'contar()'função é importada de'itertools'no início do roteiro. O 'meu_iterador'objeto é inicializado com o'contar()'função, com um'começar'valor de 0 e um'Passo'valor de 1. Em seguida, o 'sum_result'variável é inicializada pelo primeiro valor do objeto iterável. O valor inicial é inicializado para a variável eu e o número inicial é armazenado como o caractere na variável, números que serão usados ​​para combinar outros números em cada iteração. Os valores dos números sequenciais serão adicionados em cada iteração quando o 'Next()'método é chamado. Quando o valor de eu torna-se maior que n, o script terminará exibindo o resultado da soma.

"O seguinte script irá calcular
a soma de 0 com o número que será considerado como entrada.
"
# Contagem de importação
da contagem de importação de itertools
# Cria um objeto iterável de count ()
meu_iterador = contagem (início = 0, etapa = 1)
# Leia o primeiro valor do iterador
sum_result = next (my_iterator)
# Pegue a entrada de um número para terminar o loop infinito
n = int (input ("Insira o valor limite:"))
# Inicialize o valor de i e números
i = sum_result
números = f 'i'
# Declare loop infinito
enquanto verdadeiro:
# Adicione o número em cada iteração
resultado_soma + = i
i = próximo (meu_iterador)
# Encerre o loop se o valor de i for maior que n
if (i> n):
pausa
# Adicione o valor numérico como uma string com o símbolo '+'
números + = "+" + f 'i'
# Imprima o valor final
imprimir ("% s =% d"% (números, sum_result))

Resultado

A seguinte saída mostra que o número 10 é considerado como a entrada usada para encerrar o loop após a execução do script. Nesta saída, o script calculou a soma de 0 a 10 e imprimiu a saída, 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.

Itertools.ciclo()

Esta função contém apenas um argumento, que pode ser qualquer objeto. O objetivo desta função é repetir os valores do objeto após completar a iteração de todos os valores. Aqui, strings, tuplas, listas, etc. pode ser usado como um objeto. Os retornos de objetos iteráveis ​​desta função são usados ​​para iterar cada valor do objeto que será usado como um argumento usando o 'Next()'método. O número de vezes que os valores do objeto iterável irão iterar será baseado no número de iterações do loop. A sintaxe desta função é dada abaixo.

Sintaxe

itertools.ciclo (objeto)

Exemplo 8: Uso da função cycle () dos itertools

O 'aleatória' e 'itertools'módulos são importados no início do script para gerar um número aleatório e usar o'ciclo()'função de'itertools'módulo para repetir os dados. Uma lista de três números aleatórios é usada como o argumento do 'ciclo()'função. O objeto iterável chamado 'num_list'é inicializado pelo valor de retorno desta função. O 'contar'variável é inicializada para 0, e quando o valor desta variável se torna 6, a 'enquanto'loop vai terminar. Então o 'enquanto'loop irá iterar seis vezes, e cada valor da lista se repetirá apenas uma vez.

# Importar módulo aleatório
importar aleatório
# Módulo de importação de itertools
importar itertools
# Gere um objeto iterável com base na lista de três números aleatórios
num_list = itertools.ciclo ([aleatório.randint (1,5), aleatório.randint (10,50), aleatório.Randint
(100.500)])
# Inicializar o contador
contagem = 0
# Repita o loop 6 vezes
enquanto (contar != 6):
print ('O número aleatório atual é:' + f 'next (num_list)')
contagem + = 1

Resultado

A saída a seguir mostra que três números aleatórios, 3, 17, e 185, foram gerados como itens de lista. O loop é iterado seis vezes e esses três valores são repetidos nas próximas iterações.

Itertools.repetir()

A função 'repeat ()' funciona como um iterador infinito e pode receber dois argumentos. Quando o segundo argumento é omitido, a função 'repeat ()' funciona como um iterador infinito e repete o valor um número infinito de vezes. Esta função não ocupa memória a cada repetição. Ele apenas cria a variável uma vez na memória e repete a mesma variável um número infinito de vezes quando apenas um argumento é definido para esta função. A sintaxe desta função é dada abaixo.

Sintaxe

itertools.repetir (valor, limite)

O primeiro argumento é usado para pegar o valor que se repetirá. O segundo argumento é opcional e é usado para definir o limite de repetições.

Exemplo 9: Uso da função repeat () do módulo itertools

O 'itertools'módulo é importado no início do script para usar o'repetir()'função. Um valor de string será obtido do usuário para repetir e um valor numérico será obtido do usuário para definir o limite de repetição. O valor de retorno do 'repetir()'função será então convertida em uma lista com o'Lista()'método e armazenado no'listData' variável. Os valores do 'listData'será impresso com'para' ciclo.

# Módulo de importação de itertools
importar itertools
# Pegue o valor de entrada que se repetirá
string = input ("Digite uma string:")
# Pegue o valor numérico para repetir
repeat = int (input ("Digite o número para repetir:"))
# usando repeat () para adicionar repetidamente a string em uma lista
listData = list (itertools.repetir (string, repetir))
# Initilize i
i = 1
print ("Os valores da lista são: \ n")
# Repita a lista usando o loop for
para val em listData:
imprimir ("Item da lista% d =% s"% (i, val))
i + = 1

Resultado

A seguinte saída mostra que 'Pitão'é considerado o valor da string, e 3 é tomado como o número usado para repetir o valor da string após a execução do script. A saída mostra que a string 'Pitão'é repetido três vezes.

Conclusão

O conceito de iterador e os usos de diferentes tipos de iteradores em Python são tentados para explicar com os exemplos muito simples neste artigo. Os usuários de Python podem usar um iterador integrado ou podem criar seu iterador personalizado com base no requisito. Este artigo ajudará os usuários de Python a saber sobre os métodos usados ​​no iterador e como esses métodos funcionam com qualquer loop para ler qualquer objeto iterável. Alguns usos de itertools módulo de python também são explicados neste artigo para saber mais detalhes do iterador em python.

Os 10 melhores jogos para jogar no Ubuntu
A plataforma Windows tem sido uma das plataformas dominantes para jogos devido à grande porcentagem de jogos que estão sendo desenvolvidos hoje para o...
5 melhores jogos de arcade para Linux
Hoje em dia, os computadores são máquinas sérias usadas para jogos. Se você não pode obter a nova pontuação máxima, você saberá o que quero dizer. Nes...
Batalha por Wesnoth 1.13.6 Desenvolvimento lançado
Batalha por Wesnoth 1.13.6 lançado no mês passado, é o sexto lançamento de desenvolvimento no 1.13.série x e oferece uma série de melhorias, principal...