Wie greife ich in einer for
Schleife wie der folgenden auf den Index zu ?
ints = [8, 23, 45, 12, 78]
for i in ints:
print('item #{} = {}'.format(???, i))
Ich möchte diese Ausgabe erhalten:
item #1 = 8
item #2 = 23
item #3 = 45
item #4 = 12
item #5 = 78
for
Wie greife ich auf den Schleifenindex zu, wenn ich ihn mit einer Schleife durchlaufe , in diesem Fall von 1 bis 5?
Antworten:
Die Verwendung einer zusätzlichen Statusvariablen, z. B. einer Indexvariablen (die Sie normalerweise in Sprachen wie C oder PHP verwenden würden), wird als nicht pythonisch betrachtet.
Die bessere Option ist die Verwendung der integrierten Funktion
enumerate()
, die sowohl in Python 2 als auch in Python 3 verfügbar ist:Weitere Informationen finden Sie in PEP 279 .
quelle
enumerate
kein weiterer Aufwand?enumerate
.Verwenden
enumerate
Sie diese Option, um den Index mit dem Element abzurufen, während Sie iterieren: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:
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:
Oder in Sprachen, die keine for-each-Schleife haben:
oder manchmal häufiger (aber unidiomatisch) in Python:
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 (einenumerate
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: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.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:
Jetzt übergeben wir diese Iterable an die Aufzählung und erstellen ein Aufzählungsobjekt:
Wir können das erste Element aus dieser Iterable herausziehen, das wir mit der
next
Funktion in eine Schleife bekommen würden :Und wir sehen, wir bekommen ein Tupel des
0
ersten Index und'a'
des ersten Elements:Wir können das, was als " Sequenzentpacken " bezeichnet wird, verwenden, um die Elemente aus diesem Zwei-Tupel zu extrahieren:
und wenn wir inspizieren
index
, stellen wir fest, dass es sich auf den ersten Index 0 unditem
auf das erste Element bezieht'a'
.Fazit
Also mach das:
quelle
items
es leer ist?[1406, 1409]
. Wenn ich mit auf die Konsole druckeprint(legData)
, lautet die Ausgabe [1406,1409] . Wenn ich jedoch versuche, die einzelnen Werte der Liste wie folgt zu analysierenfor idx, xLeg in enumerate(legData):
print(idx, xLeg)
, erhalte ich eine Ausgabe einzelner Ganzzahlen wie [, 1, 4, 0, 6 usw. gegen die Indizes 0, 1, 2, 3, 4 usw. (ja, die eckigen Klammern und Kommas werden ebenfalls ausgegeben, als wären sie Teil der Daten selbst ). Was läuft hier falsch?Es ist ziemlich einfach, es
1
anders zu starten als0
:Hinweis
Wichtiger Hinweis, wenn auch ein wenig irreführend, da
index
wird hier eintuple
(idx, item)
. Gut zu gehen.quelle
index, item
nurindex
sehr irreführend, da man zur Kenntnis genommen. Einfach benutzenfor index, item in enumerate(ints)
.quelle
xrange
für Pre-3.0 sein.enumerate
Logik zu speichern. Sie müssen noch auswählen, mit welchem Objekt indiziert werden solli
, nein?Wie es in Python üblich ist, gibt es verschiedene Möglichkeiten, dies zu tun. In allen Beispielen wird angenommen:
lst = [1, 2, 3, 4, 5]
1. Aufzählung verwenden ( als am idiomatischsten angesehen )
Dies ist meiner Meinung nach auch die sicherste Option, da die Möglichkeit einer unendlichen Rekursion ausgeschlossen ist. Sowohl das Element als auch sein Index werden in Variablen gespeichert, und es ist nicht erforderlich, weiteren Code zu schreiben, um auf das Element zuzugreifen.
2. Erstellen einer Variablen für den Index ( using
for
)3. Erstellen einer Variablen für den Index ( using
while
)4. Es gibt immer einen anderen Weg
Wie bereits erläutert, gibt es andere Möglichkeiten, die hier nicht erläutert wurden, und sie können in anderen Situationen sogar noch häufiger angewendet werden. zB unter Verwendung von
itertools.chain
mit für. Es verarbeitet verschachtelte Schleifen besser als die anderen Beispiele.quelle
Unmodern:
Listenverständnis:
quelle
Der schnellste Weg, um auf Listenindizes innerhalb der Schleife in Python 2.7 zuzugreifen, besteht darin, die Bereichsmethode für kleine Listen und die Aufzählungsmethode für Listen mittlerer und großer Größe zu verwenden.
In den folgenden Codebeispielen finden Sie verschiedene Ansätze , die zum Durchlaufen des Listen- und Zugriffsindexwerts und ihrer Leistungsmetriken (die für Sie nützlich sein könnten) verwendet werden können:
Siehe Leistungsmetriken für jede Methode unten:
Infolgedessen ist die Verwendung der
range
Methode mit 1000 Elementen die schnellste bis zur Liste. Für eine Liste mit einer Größe von> 10 000 Artikelnenumerate
ist der Gewinner.Fügen Sie unten einige nützliche Links hinzu:
Was ist der Unterschied zwischen Range- und Xrange-Funktionen in Python 2.X?
Was ist schneller für eine Schleife mit Enumerate oder für eine Schleife mit xrange in Python?
Bereich (len (Liste)) oder Aufzählung (Liste)?
quelle
Zuallererst werden die Indizes von 0 bis 4 sein. Programmiersprachen beginnen mit dem Zählen von 0; Vergessen Sie das nicht, sonst stoßen Sie auf einen Index außerhalb der Grenzen. Alles, was Sie in der for-Schleife benötigen, ist eine Variable, die wie folgt von 0 bis 4 zählt:
Denken Sie daran, dass ich 0 bis 5 geschrieben habe, da die Schleife eine Zahl vor dem Maximum stoppt. :) :)
Um den Wert eines Index zu erhalten, verwenden Sie
quelle
Folgendes erhalten Sie, wenn Sie in
for
Schleifen auf den Index zugreifen :Ergebnis:
Ergebnis:
Ergebnis:
quelle
Nach dieser Diskussion: http://bytes.com/topic/python/answers/464012-objects-list-index
Iteration des Schleifenzählers
Die aktuelle Sprache zum Durchlaufen der Indizes verwendet die integrierte
range
Funktion:Das Durchlaufen von Elementen und Indizes kann entweder durch die alte Sprache oder durch Verwendung der neuen
zip
integrierten Funktion erreicht werden:oder
über http://www.python.org/dev/peps/pep-0212/
quelle
Sie können es mit diesem Code tun:
Verwenden Sie diesen Code, wenn Sie den Indexwert am Ende der Schleife zurücksetzen müssen:
quelle
Die beste Lösung für dieses Problem ist die Aufzählung der eingebauten Python-Funktion.
Aufzählen return Tupels
erster Wert index
zweiter Wert Element des Arrays an diesem Index
quelle
In Ihrer Frage schreiben Sie: "Wie greife ich auf den Schleifenindex zu, in diesem Fall von 1 bis 5?"
Der Index für eine Liste läuft jedoch von Null. Dann müssen wir wissen, ob Sie tatsächlich den Index und das Element für jedes Element in einer Liste möchten oder ob Sie wirklich Zahlen ab 1 möchten. Glücklicherweise ist es in Python einfach, eines oder beide zu tun.
Zur Verdeutlichung gibt die
enumerate
Funktion zunächst iterativ den Index und das entsprechende Element für jedes Element in einer Liste zurück.Die Ausgabe für das Obige ist dann,
Beachten Sie, dass der Index von 0 ausgeht. Diese Art der Indizierung ist in modernen Programmiersprachen wie Python und C üblich.
Wenn Ihre Schleife einen Teil der Liste umfassen soll, können Sie die Standard-Python-Syntax für einen Teil der Liste verwenden. Sie können beispielsweise eine Schleife vom zweiten Element in einer Liste bis zum letzten Element, jedoch ohne dieses, verwenden
Beachten Sie, dass der Ausgabeindex erneut von 0 läuft.
Das bringt uns zum
start=n
Schalter fürenumerate()
. Dadurch wird der Index einfach ausgeglichen. Sie können dem Index innerhalb der Schleife auch einfach eine Zahl hinzufügen.für die die Ausgabe ist
quelle
Wenn ich iterieren
nums = [1, 2, 3, 4, 5]
würde, würde ich es tunOder erhalten Sie die Länge als
l = len(nums)
quelle
Wenn die Liste keinen doppelten Wert enthält:
quelle
enumerate
. Sie sollten diese Antwort löschen.Sie können dies auch versuchen:
Die Ausgabe ist
quelle
Sie können die
index
Methode verwendenBEARBEITEN In dem Kommentar hervorgehoben, dass diese Methode nicht funktioniert, wenn Duplikate vorhanden sind
ints
, sollte die folgende Methode für alle Werte in funktionierenints
:Oder alternativ
Wenn Sie sowohl den Index als auch den Wert
ints
als Liste von Tupeln erhalten möchten .Es verwendet die Methode von
enumerate
in der ausgewählten Antwort auf diese Frage, jedoch mit Listenverständnis, wodurch es mit weniger Code schneller wird.quelle
Einfache Antwort mit While Loop:
Ausgabe:
quelle
So drucken Sie ein Tupel (Index, Wert) im Listenverständnis mit einer
for
Schleife:Ausgabe:
quelle
Dies erfüllt den Zweck gut genug:
quelle
index()
wird nach dem ersten Auftreten von gesuchtx
, ganz zu schweigen von der O ( n ^ 2 ) -Zeit, die zum Nachschlagen jedes Elements erforderlich ist.