Wie kann ich auf den Index in einer for
Schleife?
xs = [8, 23, 45]
for x in xs:
print("item #{} = {}".format(index, x))
Gewünschter Output:
item #1 = 8
item #2 = 23
item #3 = 45
Wie kann ich auf den Index in einer for
Schleife?
xs = [8, 23, 45]
for x in xs:
print("item #{} = {}".format(index, x))
Gewünschter Output:
item #1 = 8
item #2 = 23
item #3 = 45
Verwenden Sie die integrierte Funktion enumerate()
:
for idx, x in enumerate(xs):
print(idx, x)
Sie ist nicht-pythonisch manuell zu indizieren über for i in range(len(xs)): x = xs[i]
oder manuell eine zusätzliche Zustandsvariable verwalten.
Überprüfen Sie PEP 279 für mehr.
Wie Aaron weiter unten ausführt, verwenden Sie start=1, wenn Sie 1-5 statt 0-4 erhalten möchten.
@TheRealChx101 nach meinen Tests (Python 3.6.3) ist der Unterschied vernachlässigbar und manchmal sogar zu Gunsten von enumerate
.
Wie greife ich in einer for-Schleife auf den Schleifenindex zu, in diesem Fall von 1 bis 5?
Utilisez enumerate
um den Index mit dem Element zu erhalten, während Sie iterieren:
for index, item in enumerate(items):
print(index, item)
Und beachten Sie, dass die Indizes von Python bei Null beginnen, so dass Sie mit dem obigen Beispiel 0 bis 4 erhalten würden. Wenn Sie die Zählung von 1 bis 5 wollen, tun Sie dies:
count = 0 # in case items is empty and you need it after the loop
for count, item in enumerate(items, start=1):
print(count, item)
Was Sie wollen, ist das Pythonische Äquivalent des folgenden Algorithmus, den die meisten Programmierer niedrigerer Sprachen 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 zu finden:
for index in range(len(items)): print(index, items[index])
Pythons enumerate
fonction reduziert die visuelle Unübersichtlichkeit, indem es die Buchhaltung für die Indizes ausblendet und die Iterable in eine andere Iterable kapselt (eine enumerate
Objekt), das ein Zwei-Element-Tupel aus dem Index und dem Element ergibt, das die ursprüngliche iterable liefern würde. Das sieht wie folgt aus:
for index, item in enumerate(items, start=0): # default is zero
print(index, item)
Dieses Codebeispiel ist ziemlich gut die kanonisch Beispiel für den Unterschied zwischen Code, der idiomatisch für Python ist, und Code, der es nicht ist. Idiomatischer Code ist anspruchsvolles (aber nicht kompliziertes) Python, das so geschrieben ist, wie es verwendet werden soll. Idiomatischer Code wird von den Entwicklern der Sprache erwartet, was bedeutet, dass dieser Code in der Regel nicht nur besser lesbar, sondern auch effizienter ist.
Auch wenn Sie keine Indizes benötigen, sondern nur eine Zählung der Iterationen (was manchmal wünschenswert ist), können Sie damit beginnen 1
und die endgültige Zahl ist Ihre Zählung.
count = 0 # in case items is empty
for count, item in enumerate(items, start=1): # default is zero
print(item)
print('there were {0} items printed'.format(count))
Die Anzahl scheint eher das zu sein, was Sie zu verlangen beabsichtigen (im Gegensatz zum Index), als Sie sagten, Sie wollten von 1 bis 5.
Um diese Beispiele aufzuschlüsseln, nehmen wir an, wir haben eine Liste von Elementen, über die wir mit einem Index iterieren wollen:
items = ['a', 'b', 'c', 'd', 'e']
Nun übergeben wir diese iterable an enumerate und erstellen ein enumerate-Objekt:
enumerate_object = enumerate(items) # the enumerate object
Wir können das erste Element aus dieser Iterable herausziehen, das wir in einer Schleife mit der next
Funktion:
iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)
Und wir sehen, dass wir ein Tupel von 0
der erste Index, und 'a'
den ersten Punkt:
(0, 'a')
können wir das so genannte " Reihenfolge Entpacken ", um die Elemente aus diesem Zweiertupel zu extrahieren:
index, item = iteration
# 0, 'a' = (0, 'a') # essentially this.
und wenn wir inspizieren index
bezieht sich auf den ersten Index, 0, und item
bezieht sich auf den ersten Punkt, 'a'
.
>>> print(index)
0
>>> print(item)
a
Dann tun Sie dies:
for index, item in enumerate(items, start=0): # Python indexes start at zero
print(index, item)
@Bergi: Das wird es nicht, aber Sie können einfach hinzufügen count = 0
vor der Schleife, um sicherzustellen, dass sie einen Wert hat (und zwar den richtigen, wenn die Schleife nie einen Wert zuweist). count
da es per Definition keine Gegenstände gab).
Die Frage bezog sich auf Listenindizes; da sie bei 0 beginnen, macht es wenig Sinn, von einer anderen Zahl auszugehen, da die Indizes falsch wären (ja, der OP sagte es in der Frage auch falsch). Ansonsten ist der Aufruf der Variablen, die ein Tupel von index, item
nur index
ist, wie Sie festgestellt haben, sehr irreführend. Verwenden Sie einfach for index, item in enumerate(ints)
.
Besser ist es, den Index innerhalb von Klammerpaaren als (index) einzuschließen, das funktioniert sowohl in den Python-Versionen 2 und 3.
@AnttiHaapala Ich nehme an, der Grund dafür ist, dass die erwartete Ausgabe der Frage bei Index 1 statt bei 0 beginnt.
Wenn Sie in For-In-Schleifen auf den Index zugreifen, erhalten Sie :
items = [8, 23, 45, 12, 78]
for i in enumerate(items):
print("index/value", i)
Ergebnis:
# index/value (0, 8)
# index/value (1, 23)
# index/value (2, 45)
# index/value (3, 12)
# index/value (4, 78)
items = [8, 23, 45, 12, 78]
for i, val in enumerate(items):
print("index", i, "for value", val)
Ergebnis:
# index 0 for value 8
# index 1 for value 23
# index 2 for value 45
# index 3 for value 12
# index 4 for value 78
items = [8, 23, 45, 12, 78]
for i, val in enumerate(items):
print("index", i)
Ergebnis:
# index 0
# index 1
# index 2
# index 3
# index 4
Für Python 2.3 und höher sollten Sie die eingebaute Funktion enumerate verwenden, da sie pythonischer ist.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
112 Stimmen
Beachten Sie, dass Indizes in Python bei 0 beginnen, so dass die Indizes für Ihre Beispielliste 0 bis 4 und nicht 1 bis 5 sind