Skip to content

Laço de Repetição com Contador em Python: Explicado

Python, uma linguagem de programação poderosa e versátil, oferece vários métodos para iterar sobre objetos iteráveis. Um dos mais comuns é o laço de repetição for. Neste guia abrangente, mergulharemos fundo em como utilizar efetivamente o contador do laço for em Python, focando no estilo Pythonico, iteração de laços e a notável função enumerate.

Quer criar rapidamente visualizações de dados a partir de um Dataframe do Python Pandas sem código?

PyGWalker é uma biblioteca Python para Análise Exploratória de Dados com Visualização. PyGWalker (opens in a new tab) pode simplificar sua análise de dados em Jupyter Notebook e fluxo de trabalho de visualização de dados, transformando seu dataframe do pandas (e também o dataframe do polars) em uma interface de usuário estilo Tableau para exploração visual.

PyGWalker para visualização de dados (opens in a new tab)

O Laço de Repetição e o Contador em Python

Antes de prosseguirmos para o uso de um contador com um laço for, é vital entender o que é um laço for em Python. Um laço for em Python é utilizado para iterar sobre um objeto iterável (como uma lista, tupla, dicionário, string ou intervalo), executando um bloco de código para cada item no iterável.

Normalmente, quando iteramos sobre uma sequência em um laço for, não temos um contador embutido para acompanhar o índice. No entanto, ter um contador de laço em Python é frequentemente útil em muitas situações. Ele nos permite ter controle sobre o índice do item atual enquanto executamos o laço.

frutas = ['maçã', 'banana', 'cereja']
 
for i in range(len(frutas)):
    print("O índice é", i, "e a fruta é", frutas[i])

No exemplo acima, estamos utilizando um contador manual aproveitando a função range() em combinação com o comprimento de nosso iterável. Essa abordagem, embora funcional, não é a mais Pythonica.

Iteração de Laço Pythonico com Enumerate

Aqui está a função enumerate() - uma função incorporada que torna nossa tarefa de iterar sobre um objeto iterável junto com um contador muito mais simples. A função enumerate permite iterar sobre um objeto iterável enquanto também temos acesso ao índice do item atual.

frutas = ['maçã', 'banana', 'cereja']
 
for i, fruta in enumerate(frutas):
    print("O índice é", i, "e a fruta é", fruta)

Neste exemplo, enumerate(frutas) retorna uma tupla para cada iteração do laço. O primeiro elemento é o índice (nosso contador) e o segundo elemento é o valor da lista.

Casos de Uso Avançados: Enumerate com Declarações Condicionais

A função enumerate() do Python pode ser combinada com declarações condicionais para um controle avançado sobre o processo de iteração. Aplicando condições, podemos filtrar ou modificar valores durante a iteração, com base em seu índice ou valor.

frutas = ['maçã', 'banana', 'cereja', 'fruta do dragão', 'amora']
 
for i, fruta in enumerate(frutas):
    if i % 2 == 0:
        print("O índice é", i, "e a fruta é", fruta)

No exemplo acima, imprimimos a fruta e seu índice apenas se o índice for um número par. Essa combinação de enumerate() e declarações condicionais pode fornecer um controle poderoso sobre seus laços em Python.

O uso do laço for e da função enumerate() em Python são componentes substanciais da linguagem, simplificando significativamente o processo de iteração através de dados. À medida que continuamos na segunda parte deste guia, mergulharemos na criação de funções personalizadas equivalentes ao enumerate() e no desempacotamento de valores retornados pelo enumerate(). Fique ligado enquanto desvendamos as intrincidades da iteração de laços em Python.

Criando uma Função Personalizada Equivalente ao Enumerate()

Embora a função enumerate() incorporada do Python seja bastante útil, entender seu mecanismo subjacente pode ser um ótimo exercício, reforçando seu domínio sobre os laços e funções do Python. Então vamos tentar criar uma função que imite o enumerate().

def custom_enumerate(iterável, start=0):
    contador = start
    for item in iterável:
        yield contador, item
        contador += 1
 
frutas = ['maçã', 'banana', 'cereja']
 
for i, fruta in custom_enumerate(frutas):
    print("O índice é", i, "e a fruta é", fruta)

A função custom_enumerate() acima é equivalente à função enumerate() incorporada. Usamos uma instrução yield, indicando que custom_enumerate() é uma função geradora. Essa função gera uma tupla com o contador e o item para cada item no iterável.

Desempacotando Valores Retornados pelo Enumerate

Como você já viu nos exemplos anteriores, a função enumerate() do Python retorna uma tupla contendo o índice e o valor para cada item no iterável. Você pode desempacotar esses valores diretamente na declaração do laço for, o que pode tornar seu código mais limpo e legível.

frutas = ['maçã', 'banana', 'cereja']
 
for i, fruta in enumerate(frutas):
    print(f"O índice é {i} e a fruta é {fruta}")

No exemplo acima, estamos desempacotando o índice e o valor diretamente na declaração do laço for. Esse estilo Pythonico leva a um código mais conciso e legível, especialmente ao lidar com estruturas de dados maiores e mais complexas.

Conclusão

O uso de um contador em um laço for em Python, seja com a ajuda da função enumerate() incorporada do Python ou uma função personalizada, é uma técnica essencial no conjunto de ferramentas do programador Python. Isso não apenas torna seu código mais eficiente, mas também eleva o estilo a seguir o Pythonico, tornando-o mais legível e manutenível. Resumindo, esperamos que este guia tenha fornecido uma compreensão abrangente dos contadores de loop for em Python. Ao entender e aplicar esses conceitos, você pode escrever código mais limpo e eficiente, seja trabalhando em scripts pequenos ou em sistemas grandes e complexos.

Perguntas Frequentes

1. Qual é a finalidade da função enumerate() em Python?

A função enumerate() em Python adiciona um contador a um iterável e o retorna como um objeto de enumeração. Essa função integrada facilita a iteração sobre um objeto juntamente com um índice que representa a posição do item atual.

2. Como funciona um loop for em Python?

Um loop for em Python é usado para iterar sobre um objeto iterável, executando um bloco de código para cada item no iterável. O iterável pode ser uma lista, tupla, string, dicionário, conjunto ou qualquer outro objeto que suporte iteração.

3. Como posso criar uma função personalizada semelhante ao enumerate()?

Uma função personalizada que imita o enumerate() pode ser criada usando uma função geradora. Essa função retornaria uma tupla do contador e do item atual para cada iteração sobre o iterável. Confira a seção 'Criando uma Função Personalizada Equivalente ao Enumerate()' deste artigo para um exemplo detalhado.