Wie greife ich mit einer for-Schleife auf den Schleifenindex zu, in diesem Fall von 1 bis 5?
Verwenden enumerate
Sie diese Option, um den Index mit dem Element abzurufen, während Sie iterieren:
for index, item in enumerate(items):
print(index, item)
Beachten Sie auch, dass die Python-Indizes bei Null beginnen, sodass Sie mit den oben genannten Werten 0 bis 4 erhalten. Wenn Sie die Zählung 1 bis 5 möchten, gehen Sie folgendermaßen vor:
for count, item in enumerate(items, start=1):
print(count, item)
Unidiomatischer Kontrollfluss
Was Sie verlangen, ist das pythonische Äquivalent des folgenden Algorithmus. Dies ist der Algorithmus, den die meisten Programmierer von Sprachen niedrigerer Ebenen verwenden würden:
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
Oder in Sprachen, die keine for-each-Schleife haben:
index = 0
while index < len(items):
print(index, items[index])
index += 1
oder manchmal häufiger (aber unidiomatisch) in Python:
for index in range(len(items)):
print(index, items[index])
Verwenden Sie die Aufzählungsfunktion
Die enumerate
Funktion von Python reduziert die visuelle Unordnung, indem die Berücksichtigung der Indizes ausgeblendet und das Iterable in ein anderes Iterable (ein enumerate
Objekt) eingekapselt wird, das ein Tupel mit zwei Elementen des Index und des Elements ergibt, das das ursprüngliche Iterable bereitstellen würde. Das sieht so aus:
for index, item in enumerate(items, start=0): # default is zero
print(index, item)
Dieses Codebeispiel ist ziemlich gut das kanonische Beispiel für den Unterschied zwischen Code, der für Python typisch ist, und Code, der nicht Python ist. Idiomatischer Code ist ausgefeiltes (aber nicht kompliziertes) Python, das so geschrieben wurde, wie es verwendet werden sollte. Von den Designern der Sprache wird idiomatischer Code erwartet, was bedeutet, dass dieser Code normalerweise nicht nur besser lesbar, sondern auch effizienter ist.
Eine Zählung bekommen
Auch wenn Sie unterwegs keine Indizes benötigen, aber eine Zählung der Iterationen (manchmal wünschenswert) benötigen, mit denen Sie beginnen können, 1
und die endgültige Zahl ist Ihre Zählung.
for count, item in enumerate(items, start=1): # default is zero
print(item)
print('there were {0} items printed'.format(count))
Die Zählung scheint eher das zu sein, wonach Sie fragen möchten (im Gegensatz zum Index), als Sie sagten, Sie wollten von 1 bis 5.
Aufschlüsselung - eine schrittweise Erklärung
Angenommen, wir haben eine Liste von Elementen, die wir mit einem Index durchlaufen möchten, um diese Beispiele aufzuschlüsseln:
items = ['a', 'b', 'c', 'd', 'e']
Jetzt übergeben wir diese Iterable an die Aufzählung und erstellen ein Aufzählungsobjekt:
enumerate_object = enumerate(items) # the enumerate object
Wir können das erste Element aus dieser Iterable herausziehen, das wir mit der next
Funktion in eine Schleife bekommen würden :
iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)
Und wir sehen, wir bekommen ein Tupel des 0
ersten Index und 'a'
des ersten Elements:
(0, 'a')
Wir können das, was als " Sequenzentpacken " bezeichnet wird, verwenden, um die Elemente aus diesem Zwei-Tupel zu extrahieren:
index, item = iteration
# 0, 'a' = (0, 'a') # essentially this.
und wenn wir inspizieren index
, stellen wir fest, dass es sich auf den ersten Index 0 und item
auf das erste Element bezieht 'a'
.
>>> print(index)
0
>>> print(item)
a
Fazit
- Python-Indizes beginnen bei Null
- Verwenden Sie die Aufzählungsfunktion, um diese Indizes von einer Iterable abzurufen, während Sie darüber iterieren
- Durch die idiomatische Verwendung von enumerate (zusammen mit dem Entpacken von Tupeln) wird Code erstellt, der besser lesbar und wartbar ist:
Also mach das:
for index, item in enumerate(items, start=0): # Python indexes start at zero
print(index, item)