Python: Iterar sob listas com índices

Palavras-chave: for, iteração, índice

O for do Python é bastante conveniente para iterar listas, descartando a necessidade de variáveis de índice auxiliares. No entanto as vezes é necessário iterar uma lista e ter o índice de cada elemento além do elemento em si. A forma óbvia é algo como:

for i in range(len(lista)):
   elem= lista[i]
   print i, "=", elem

Mas algumas vezes isto pode ser inconveniente (na construção py:for do TurboGears, por exemplo). Nestes casos podemos usar o map() para criar uma lista de tuplas de cada elemento com seu índice:

>>> lista= ["maçã", "banana", "pêra"]
>>> for i, elem in map(None, range(len(lista)), lista):
>>>   print i, "=", elem
0 = maçã
1 = banana
2 = pêra

Atualização: Como comentado pelo Barbieri, a partir do Python 2.3 existe a função enumerate() que faz a mesma coisa:

>>> lista= ["maçã", "banana", "pêra"]
>>> for i, elem in enumerate(lista):
>>>   print i, "=", elem
0 = maçã
1 = banana
2 = pêra
This entry was posted in Python. Bookmark the permalink.

2 Responses to Python: Iterar sob listas com índices

  1. Kojima,

    Desde a versão 2.3 do python temos o enumerate(), que faz exatamente o mesmo que a sua segunda versão.

    Além disso, o uso de range() poderia ser trocado por xrange(), que é mais eficiente, tanto em tempo quanto em memória.

  2. Pretto says:

    Uma coisa bastante interessante para utilização de listas é transformar uma lista em dicionário como no código abaixo:

    sections =[‘Arquivos’,’Musicas’,’Filmes’]

    section_size = dict.fromkeys(sections, 0)

    #section _size agora contém
    #{‘Arquivos’:0,’Musicas’:0,’Filmes’:0}

Leave a Reply

Your email address will not be published. Required fields are marked *