Usando um loop for, como acesso o índice do loop, de 1 a 5 neste caso?
Use enumerate
para obter o índice com o elemento conforme você itera:
for index, item in enumerate(items):
print(index, item)
E observe que os índices do Python começam em zero, então você obteria 0 a 4 com o acima. Se você deseja a contagem de 1 a 5, faça o seguinte:
for count, item in enumerate(items, start=1):
print(count, item)
Fluxo de controle unidiomatic
O que você está pedindo é o equivalente Pythonic do seguinte, que é o algoritmo que a maioria dos programadores de linguagens de nível inferior usaria:
index = 0 # Python's indexing starts at zero
for item in items: # Python's for loops are a "for each" loop
print(index, item)
index += 1
Ou em idiomas que não possuem um loop for-each:
index = 0
while index < len(items):
print(index, items[index])
index += 1
ou às vezes mais comumente (mas unidiomaticamente) encontrado no Python:
for index in range(len(items)):
print(index, items[index])
Use a função enumerar
A enumerate
função do Python reduz a desordem visual, ocultando a contabilidade dos índices e encapsulando o iterável em outro iterável (um enumerate
objeto) que produz uma tupla de dois itens do índice e o item que o iterável original forneceria. É assim:
for index, item in enumerate(items, start=0): # default is zero
print(index, item)
Esse exemplo de código é razoavelmente bem o exemplo canônico da diferença entre o código idiomático do Python e o código que não é. O código linguístico é sofisticado (mas não complicado), o Python, escrito da maneira que ele deveria ser usado. O código linguístico é esperado pelos projetistas da linguagem, o que significa que geralmente esse código não é apenas mais legível, mas também mais eficiente.
Obtendo uma contagem
Mesmo que você não precise de índices à medida que avança, mas precisa de uma contagem das iterações (às vezes desejáveis) com as quais pode começar 1
e o número final será sua contagem.
for count, item in enumerate(items, start=1): # default is zero
print(item)
print('there were {0} items printed'.format(count))
A contagem parece ser mais o que você pretende solicitar (em oposição ao índice) quando disse que queria de 1 a 5.
Quebrando-o - uma explicação passo a passo
Para detalhar esses exemplos, digamos que temos uma lista de itens que queremos iterar com um índice:
items = ['a', 'b', 'c', 'd', 'e']
Agora passamos esse iterável para enumerar, criando um objeto enumerado:
enumerate_object = enumerate(items) # the enumerate object
Podemos extrair o primeiro item dessa iterável que entraríamos em loop com a next
função:
iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)
E vemos que obtemos uma tupla do 0
primeiro índice e 'a'
do primeiro item:
(0, 'a')
podemos usar o que é chamado de " descompactação de sequência " para extrair os elementos dessa duas tuplas:
index, item = iteration
# 0, 'a' = (0, 'a') # essentially this.
e quando inspecionamos index
, descobrimos que ele se refere ao primeiro índice, 0, e item
ao primeiro item 'a'
,.
>>> print(index)
0
>>> print(item)
a
Conclusão
- Os índices Python começam em zero
- Para obter esses índices de uma iterável à medida que você itera, use a função enumerar
- O uso de enumerar da maneira idiomática (junto com a descompactação da tupla) cria um código mais legível e de manutenção:
Então faça o seguinte:
for index, item in enumerate(items, start=0): # Python indexes start at zero
print(index, item)