Dabei Schleife, während die Liste von Indizes in python
Sagen wir, wir haben die Liste mit unbekannten Anzahl von Indizes ist es möglich, etwas zu tun, wie
i=0
while foo[i]:
...
i+=1
In meinem Beispiel bekomme ich Fehler, weil index out of range sein, aber ich denke, Sie bekommen, was ich will?
Naja, meinst du wirklich brauchen die
Sie scheinen nicht zu verstehen, die Natur von python-Listen. Sie wachsen und schrumpfen dynamisch, Sie können jederzeit überprüfen Sie Ihre tatsächliche Größe mit der len() builtin-Funktion, und die Iteration über jedes einzelne element mit dem für - Schleife... Und beim aufzählen der Elemente, es kommt auflisten() builtin-Funktion.
i
Wert, oder sind Sie es einfach benutzen, um Elemente aus foo
? Weil in Python, wir iterieren über Container tatsächlich Durchlaufen die container, die nicht durch Iteration über Indizes.Sie scheinen nicht zu verstehen, die Natur von python-Listen. Sie wachsen und schrumpfen dynamisch, Sie können jederzeit überprüfen Sie Ihre tatsächliche Größe mit der len() builtin-Funktion, und die Iteration über jedes einzelne element mit dem für - Schleife... Und beim aufzählen der Elemente, es kommt auflisten() builtin-Funktion.
InformationsquelleAutor Templar | 2011-08-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
was du suchst ist:
den
aufzählen
built-in dauert eine Sequenz (wie eine Liste oder einen generator), und liefert ein Tupel, das erste element enthält die iteration Nummer, und das zweite element enthält den Wert der Sequenz, die für die iteration.Da Sie speziell Fragen über eine "unbekannte Anzahl von Indizes", ich will auch zu klären, indem Sie hinzufügen, dass
enumerate
arbeitet träge. Im Gegensatz zulen
, die Bedürfnisse zu berechnen bzw. zu bewerten eine gesamte Sequenz im Voraus (vorausgesetzt, Sie arbeiten mit etwas komplizierter als eine einfache Liste), und wäre damit nicht für eine unendliche Liste, und nehmen Sie eine unbestimmte Menge an Zeit für einige beliebige generator-Funktion (die müssten dann erneut ausgeführt werden, was möglicherweise zu Nebenwirkungenenumerate
nur wertet der nächsten Sequenz in der Liste. Dies kann gezeigt werden, wobei die Tatsache, dass es ausgeführt wird, wie erwartet, auf die einfachste, um beispielsweise eine Sequenz mit einer unbekannten Anzahl von Einträgen: eine unendliche Liste:BEARBEITEN - in Reaktion auf Ihre Kommentare:
Mit
for ... enumerate ...
ist von Natur aus teurer als nur mitfor
(gegeben, dass Sie den overhead zu tun, eine zusätzlicheenumerate
). Jedoch, ich würde behaupten, dass wenn Sie verfolgen die Indizes der Sequenz von Elementen, die dieses kleine bisschen Mehraufwand wäre ein kleiner Preis zu zahlen, für die sehr pythonic Präsentation, die er bietet (das heißt,i=0; i += 1
ist eine sehr C-Stil-idiom).Nach ein bisschen suchen habe ich ausgegraben (und dann agf korrigiert die url) der source-code für die enumerate-Funktion (und darüber hinaus die
reversed
- Funktion). Es ist ziemlich einfach zu Folgen, und es sieht nicht sehr teuer bei allen.yeah len würde wahrscheinlich länger sein, aber was ist, wenn nur ich in der Liste?
hg.python.org/cpython/file/b1af3aeba523/Objects/enumobject.c
InformationsquelleAutor Nate
wenn Sie eine python-Liste können Sie die Liste Durchlaufen mit for-Schleife:
wenn Sie müssen, verwenden Sie eine while-Schleife, können Sie versuchen,
__len__
magic-Methode.InformationsquelleAutor Will
Nicht den leichtesten Weg, aber Sie können genau das tun, was Sie Tat, aber die Ausnahme abfangen.
Dass würde Ende an jedem Punkt in der Liste, wo das element einen Wert hat, dass die tests als falsch, oder verarbeitet die gesamte Liste, wenn es keine false-Wert. Wenn das, was Sie wollen, ist immer Prozess die ganze Liste, auch wenn es falsche Werte, Wandel
while foo[i]
zuwhile 1
. Sie hätte Zugriff auf foo[i] in den Körper der Schleife (ich nehme an, Sie wollen sowieso) auf die Reise Ausnahme und vermeiden eine Endlosschleife.es ist wohl außer stattdessen fangen
InformationsquelleAutor morningstar
Können Sie entweder einen for-Schleife oder while-Schleife.
Python gibt verschiedene Möglichkeiten, zum Durchlaufen einer Liste, ohne zu wissen, dessen index.
For-Schleife:
oder verwenden Sie
In diesem Fall wird der iterator wird ein Integer ist, kommt Es in praktisch in verschiedenen Situationen.
While-Schleife:
Ich lieber mit for-Schleife, wenn es um die Iteration von Liste in python
InformationsquelleAutor Rahul