Iteradores em Python

O objetivo deste artigo é examinar os iteradores do Python com exemplos para que possam atender às necessidades dos alunos.

Iteradores do Python

Os iteradores do Python são objetos que contêm um número contável de valores.

O valor de um iterador pode ser percorrido várias vezes, indicando que o objeto pode ser iterado.

Os iteradores em Python implementam o protocolo iterador, que consiste nos métodos iter() e next() .

 

Iteradores do Python



Iterador vs Iterável

Objetos iteráveis ​​incluem listas , tuplas, dicionários e conjuntos . Com os iteradores do Python , eles são contêineres iteráveis ​​que podem ser usados ​​para criar iteradores.

Um iterador pode ser obtido de qualquer um desses objetos chamando seu método iter() .

Forneça um iterador de uma tupla e exiba todos os valores:

Example: 1 

1
2
3
4
5
6
7
8
laptop_tuple = ("Apple", "HP", "Dell", "Lenovo")
laptop_it = iter(laptop_tuple)
print(next(laptop_it))
print(next(laptop_it))
print(next(laptop_it))
print(next(laptop_it))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Exiba dois valores com um iterador baseado em uma tupla:

Example: 2 

1
2
3
4
5
6
laptop_tuple = ("Apple", "HP", "Dell", "Lenovo")
laptop_it = iter(laptop_tuple)
print(next(laptop_it))
print(next(laptop_it))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Strings também são objetos iteráveis ​​e podem ser retornados como iteradores.

Uma string também é um objeto iterável , incluindo uma sequência de caracteres:

Strings iterable object Example: 1 

1
2
3
4
5
6
7
8
9
company_string = "Apple"
company_it = iter(company_string)
print(next(company_it))
print(next(company_it))
print(next(company_it))
print(next(company_it))
print(next(company_it))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Strings iterable object Example: 2 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
company_string = "Mr "
laptop_string = "Examples"
company_it = iter(company_string)
laptop_it = iter(laptop_string)
print(next(company_it))
print(next(company_it))
print(next(company_it))
print(next(laptop_it))
print(next(laptop_it))
print(next(laptop_it))
print(next(laptop_it))
print(next(laptop_it))
print(next(laptop_it))
print(next(laptop_it))
print(next(laptop_it))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Criar um iterador

Você deve implementar os métodos __iter__() e __next__() em seu objeto para criar um iterador.

No capítulo Python Classes/Objects, você aprendeu que todas as classes têm uma função chamada __init__() que permite inicializar o objeto.

Da mesma forma, o método iter() permite que você faça operações (inicialização, etc.), mas você sempre deve fornecer o objeto iterador.

Além disso, o método next() permite que você execute operações e deve fornecer o próximo item.

Implementando um iterador para retornar números que aumentam em cinco a cada vez (retornando 0,5,10,15,20,25, etc.):

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Common_difference:
def __iter__(mrx):
mrx.val = 0
return mrx
def __next__(mrx):
ample = mrx.val
mrx.val += 5
return ample
mrxclass = Common_difference()
ampleiter = iter(mrxclass)
print(next(ampleiter))
print(next(ampleiter))
print(next(ampleiter))
print(next(ampleiter))
print(next(ampleiter))
print(next(ampleiter))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Inverta agora – implemente iteradores Python para retornar números diminuindo em cinco (retornando 25, 20, 15, 10, 5, 0 etc.):

Iterator creation Example: 2 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Common_difference:
def __iter__(mrx):
mrx.val = 25
return mrx
def __next__(mrx):
ample = mrx.val
mrx.val -= 5
return ample
mrxclass = Common_difference()
ampleiter = iter(mrxclass)
print(next(ampleiter))
print(next(ampleiter))
print(next(ampleiter))
print(next(ampleiter))
print(next(ampleiter))
print(next(ampleiter))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Fazendo um loop através de um iterador

Os iteradores do Python também podem ser invocados com um loop for para iterar por meio de um objeto iterável.

Execute iterações em valores de tupla:

Iterator For Loop Example: 1

1
2
3
4
5
6
7
laptop_tuple = ("Apple", "HP", "Dell", "Lenovo")
for mrx in laptop_tuple:
print(mrx)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Execute iterações nos caracteres de uma string:

Example: 

1
2
3
4
5
6
laptop_tuple = ("M", "R", " ", "E", "x", "a", "m", "p", "l", "e", "s")
for mrx in laptop_tuple:
print(mrx)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

String Iterator For Loop Example: 1

1
2
3
4
5
6
7
laptop_string = "Mr Examples"
for mrx in laptop_string:
print(mrx)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Cada loop em um loop for cria um objeto iterador e executa seu método next() .


Interromper iteração

Em um loop for, ou se você usasse instruções next() suficientes , o exemplo acima nunca terminaria.

Usando a instrução StopIteration, podemos evitar que a iteração continue para sempre.

Podemos adicionar uma condição de parada ao método next() para retornar um erro se a iteração for feita mais do que um determinado número de vezes.

Não continue após 50 iterações:

Stop Iteration Example: 1 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Common_difference:
def __iter__(mrx):
mrx.val = 0
return mrx
def __next__(mrx):
if mrx.val <= 50:
ample = mrx.val
mrx.val += 5
return ample
else:
raise StopIteration
mrxclass = Common_difference()
ampleiter = iter(mrxclass)
for a in ampleiter:
print(a)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Inverta agora:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Common_difference:
def __iter__(mrx):
mrx.val = 50
return mrx
def __next__(mrx):
if mrx.val >= 0:
ample = mrx.val
mrx.val -= 5
return ample
else:
raise StopIteration
mrxclass = Common_difference()
ampleiter = iter(mrxclass)
for a in ampleiter:
print(a)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Benefícios dos iteradores em Python

Os iteradores em Python oferecem vários benefícios, como:

  1. Os iteradores permitem a utilização eficiente da memória ao trabalhar com sequências de dados grandes ou infinitas. Em vez de carregar todos os dados na memória de uma vez, os iteradores geram e fornecem elementos um por vez, somente quando solicitados. Isso é particularmente útil ao lidar com grandes conjuntos de dados que não cabem inteiramente na memória.
  2. Os iteradores oferecem suporte à avaliação preguiçosa, o que significa que eles geram elementos em tempo real à medida que são solicitados. Isso pode melhorar significativamente o desempenho e reduzir o tempo de computação, evitando cálculos desnecessários ou gerando elementos que podem não ser necessários.
  3. Os iteradores simplificam o processo de loop ou iteração em uma coleção de elementos. Ao fornecer uma interface consistente e padronizada, como o forloop, os iteradores abstraem os detalhes subjacentes da recuperação ou geração de dados, tornando o código mais legível e fácil de escrever.
  4. Os iteradores permitem que você defina a lógica de geração de sequência personalizada. Ao implementar os métodos __iter__() e __next__()em uma classe, você pode criar seus próprios objetos iteráveis ​​que produzem elementos com base em regras ou condições específicas. Isso fornece flexibilidade na geração de sequências ou na iteração de estruturas de dados complexas.
  5. Os iteradores se integram perfeitamente com funções integradas como next(), iter(), map(), filter() e sum(). Essas funções funcionam com iteradores, permitindo operações de processamento de dados concisas e eficientes. Essa integração permite um estilo de programação funcional e promove a capacidade de reutilização e composição do código.
Para apreciar nossos esforços ou sugerir melhorias para este site, por favor, deixe sua reação abaixo.
Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone