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
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.
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}