A abordagem pitônica para loops range () e enumerate ()

O autor da nota, que estamos publicando hoje, quer falar sobre alguns dos recursos do uso for loops no Python.



O loop for é um dos pilares da programação. Os futuros programadores se familiarizam com esses ciclos no início de seus estudos e, após o primeiro conhecimento, os usam constantemente.

Se você começou a desenvolver em Python, tendo experiência em trabalhar com outra linguagem de programação popular, como PHP ou JavaScript, está familiarizado com a técnica de usar uma variável de contador que armazena, por exemplo, o índice do elemento atual da matriz que está sendo processada em um loop. Aqui está um exemplo de como trabalhar com um loop escrito em JavaScript:

 let scores = [54,67,48,99,27]; for(const i=0; i < scores.length; i++) {   console.log(i, scores[i]); } /* 0 54 1 67 2 48 3 99 4 27 */ 

Ao trabalhar com loops, é muito importante entender que esses loops não repetem as matrizes. Eles apenas fornecem ao programador um mecanismo para trabalhar com a variável counter, que é usada para acessar os elementos das matrizes processadas.

No exemplo anterior, a variável i não possui nenhuma relação explícita com a matriz de scores . Ele apenas armazena um determinado número, que aumenta em 1 em cada iteração do loop e que, como se vê, é adequado para acesso seqüencial aos elementos da matriz por seus índices.

Maneira antiga (sem êxito) de trabalhar com matrizes


O Python não possui tradicionais loops como o mostrado acima. É verdade que, se você é como eu, seu primeiro desejo em dominar o Python será encontrar uma maneira de criar um loop que seja familiar e conveniente para você trabalhar.

Como resultado, você pode detectar a função range() e escrever em Python algo semelhante ao seguinte:

 scores = [54,67,48,99,27] for i in range(len(scores)):   print(i, scores[i]) """ 0 54 1 67 2 48 3 99 4 27 """ 

O problema desse loop é que ele não se encaixa muito bem na ideologia Python. Nele, não iteramos sobre a lista, mas, em vez disso, usamos a variável auxiliar i para acessar os elementos da lista.

De fato, mesmo em JavaScript, existem métodos que permitem iterar sobre matrizes, por assim dizer, sem intermediários. Estes são forEach e for of loops.

Usando a função enumerate ()


Se você precisar rastrear adequadamente o "índice de um elemento" em um loop for Python, a função enumerate() , que permite "recalcular" o objeto iterável, pode ser adequada. Ele pode ser usado não apenas para processar listas, mas também para trabalhar com outros tipos de dados - com strings, tuplas, dicionários.

Essa função usa dois argumentos: um objeto iterável e um valor opcional de contador inicial.

Se o valor inicial do contador enumerate() não for passado, é, por padrão, definido como 0 . A função cria um objeto que gera tuplas consistindo no índice do elemento e desse próprio elemento.

 scores = [54,67,48,99,27] for i, score in enumerate(scores):   print(i, score) 

Esse código acabou sendo muito mais limpo que o código do exemplo anterior. Deixamos o trabalho com a lista de índices, iteramos sobre os próprios valores, obtendo acesso direto a eles no loop for, e vemos os valores com os quais trabalhamos na declaração do ciclo.

Aqui está um recurso interessante que atrairá aqueles que precisam exibir listas numeradas para que o número do primeiro elemento não seja 0 , de acordo com seu índice, mas 1 . Geralmente, para fazer isso, é necessário alterar o número exibido do elemento. Por exemplo - assim: i + 1 . Ao usar a função enumerate() , basta passar para ela, como o segundo argumento, o número a partir do qual você deseja iniciar a numeração. No nosso caso - 1 :

 scores = [54,67,48,99,27] for i, score in enumerate(scores, 1):   print(i, score) """ 1 54 2 67 3 48 4 99 5 27 """ 

Sumário


Esperamos que esta pequena história sobre loops no Python tenha permitido que você aprenda algo novo sobre essa linguagem.

Caros leitores! Você conhece outras maneiras de usar a função enumerate() ? Os loops criados usando enumerate() parecem mais legíveis do que os loops criados usando range(len()) ?

Source: https://habr.com/ru/post/pt485648/


All Articles