Loop indexado

Digamos que você queira fazer um loop em uma coleção e obter o índice do item e o valor. Existem muitos padrões para isso:

Este é o mais básico:

for idx in range(len(things)):
print idx,things[idx]

Este é mais um criativo:

for idx, val in zip(range(len(things)), things):
print idx,val

Não faça isso!

O que a maioria das pessoas não sabe é que o Python na verdade tem uma função integrada chamada enumerateque faz exatamente a coisa certa:

for idx,val in enumerate(things):
print idx,val

Também existe um segundo argumento que permite especificar o índice inicial, caso você não queira um baseado em zero.

Disponível desde Python 2.3.