En utilisant une boucle for, comment accéder à l'index de boucle, de 1 à 5 dans ce cas?
Utilisez enumerate
pour obtenir l'index avec l'élément lors de l'itération:
for index, item in enumerate(items):
print(index, item)
Et notez que les index de Python commencent à zéro, vous obtiendrez donc 0 à 4 avec ce qui précède. Si vous voulez le nombre, 1 à 5, procédez comme suit:
for count, item in enumerate(items, start=1):
print(count, item)
Flux de contrôle unidiomatique
Ce que vous demandez, c'est l'équivalent Pythonic des éléments suivants, qui est l'algorithme que la plupart des programmeurs de langages de niveau inférieur utiliseraient:
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 dans les langues qui n'ont pas de boucle pour chaque:
index = 0
while index < len(items):
print(index, items[index])
index += 1
ou parfois plus communément (mais de manière non unidirectionnelle) trouvé en Python:
for index in range(len(items)):
print(index, items[index])
Utilisez la fonction Enumerate
La enumerate
fonction de Python réduit l'encombrement visuel en masquant la comptabilité des index et en encapsulant l'itérable dans un autre itérable (un enumerate
objet) qui produit un tuple à deux éléments de l'index et l'élément que l'itérable d'origine fournirait. Cela ressemble à ceci:
for index, item in enumerate(items, start=0): # default is zero
print(index, item)
Cet exemple de code est assez bien le exemple canonique de la différence entre le code qui est idiomatique de Python et le code qui ne l'est pas. Le code idiomatique est un Python sophistiqué (mais pas compliqué), écrit de la manière dont il était destiné à être utilisé. Le code idiomatique est attendu par les concepteurs du langage, ce qui signifie que généralement ce code n'est pas seulement plus lisible, mais aussi plus efficace.
Obtenir un décompte
Même si vous n'avez pas besoin d'index au fur et à mesure, mais vous avez besoin d'un décompte des itérations (parfois souhaitables) avec lesquelles vous pouvez commencer 1
et le nombre final sera votre décompte.
for count, item in enumerate(items, start=1): # default is zero
print(item)
print('there were {0} items printed'.format(count))
Le compte semble être plus ce que vous avez l'intention de demander (par opposition à l'index) lorsque vous avez dit que vous vouliez de 1 à 5.
Décomposer - une explication étape par étape
Pour décomposer ces exemples, disons que nous avons une liste d'éléments que nous voulons répéter avec un index:
items = ['a', 'b', 'c', 'd', 'e']
Nous passons maintenant cet itérable à énumérer, créant un objet énuméré:
enumerate_object = enumerate(items) # the enumerate object
Nous pouvons retirer le premier élément de cet itérable que nous obtiendrions dans une boucle avec la next
fonction:
iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)
Et nous voyons que nous obtenons un tuple 0
, le premier index et 'a'
le premier élément:
(0, 'a')
nous pouvons utiliser ce que l'on appelle le " décompression de séquence " pour extraire les éléments de ce double-tuple:
index, item = iteration
# 0, 'a' = (0, 'a') # essentially this.
et quand nous contrôlons index
, nous trouvons qu'il est fait référence au premier indice, 0, et item
fait référence au premier élément, 'a'
.
>>> print(index)
0
>>> print(item)
a
Conclusion
- Les index Python commencent à zéro
- Pour obtenir ces index à partir d'un itérable au fur et à mesure que vous le parcourez, utilisez la fonction énumération
- L'utilisation d'énumération de manière idiomatique (avec le décompactage de tuple) crée un code plus lisible et plus facile à gérer:
Faites donc ceci:
for index, item in enumerate(items, start=0): # Python indexes start at zero
print(index, item)