Wie verwendet man mehr als eine Bedingung in Python for loop?

8

Wie verwendet man mehr als eine Bedingung in Python für eine Schleife?

%Vor%

Wie dosiere die python for-Schleife das?

    
beautCode 27.07.2011, 04:48
quelle

7 Antworten

14

Die Python for Schleife hat selbst keine Unterstützung dafür. Sie können denselben Effekt mit einer break -Anweisung erzielen:

%Vor%

In Python ist ein for wirklich ein foreach , das über einen "Iterator" oder ein "iterbares Objekt" iteriert. In Python 2.x erstellt die obige for -Schleife eine Liste mit den Zahlen 1 bis einschließlich 7 und iteriert dann über die Liste. In Python 3.x erhält die obige Schleife ein "Iterator-Objekt", das nacheinander die Werte 1 bis einschließlich 7 ausgibt. (Der Unterschied liegt in der Funktion range() und was sie zurückgibt. In Python 2.x können Sie xrange() verwenden, um ein Iterator-Objekt zu erhalten, anstatt eine Liste zuzuweisen.)

Ich habe Ihr n -Objekt nicht angezeigt, weil i auf dieselben Werte gesetzt wird, die darin enthalten wären. Wenn Sie tatsächlich eine Liste hatten, über die Sie iterieren können, ist es gut, dass Python direkt darüber iteriert, anstatt die Variable i zu verwenden, um die Liste zu indizieren. Wenn Sie noch eine Indexvariable benötigen, können Sie sie mit enumerate() wie folgt erhalten:

%Vor%     
steveha 27.07.2011, 04:53
quelle
7

Das direkte Äquivalent zu Ihrem Java-Code ist ein while loop:

%Vor%

Sie könnten auch tun:

%Vor%     
dan04 27.07.2011 04:55
quelle
4

Sie können eine while -Schleife mit der gleichen Art von Logik schreiben (aber in Python ist && buchstabiert and , und || ist buchstabiert or ); oder Sie können eine for-Schleife verwenden, die über eine Sequenz iteriert und dann zusätzliche Logik hinzufügt, um aus der Schleife auszubrechen.

In Python bevorzugen wir keine Ganzzahlen, um in einen Container zu indizieren. Dies würde tatsächlich viel von unserem Code zerstören, da wir die Datentypen nicht zur Kompilierzeit überprüfen und einige Container nicht indiziert werden können. In einen Container einzutauchen ist bereits ein Design-Geruch: Die Tatsache, dass alles in einem sequentiellen Container ist, soll bedeuten, dass keines der Elemente "speziell" ist, oder wir hätten sie getrennt gehalten. Iteration ist Iteration, und wir sollten nicht aus dem Weg gehen, um es komplizierter zu machen.

    
Karl Knechtel 27.07.2011 04:55
quelle
3

Angenommen, Sie möchten den i-ten Punkt von n irgendwo in der Schleife haben, speichert enumerate die Eingabe von n[i] überall - der Wert wird in der Variablen item

gespeichert %Vor%

Beachten Sie, dass die Schleife automatisch beendet wird, wenn die Länge von n kleiner als 5 ist

    
John La Rooy 27.07.2011 04:59
quelle
3

Hier ist eine Möglichkeit, zwei oder mehr Bedingungen mit der für -Schleife zu haben, was die -Frage eigentlich ist . Der Punkt, den ich versuche zu machen, ist, dass es gemacht werden kann, aber es ist nicht sehr pythonisch und es ist im Allgemeinen keine gute Idee, Code aus einer anderen Sprache Zeile um Zeile neu zu schreiben.

%Vor%     
John La Rooy 27.07.2011 05:13
quelle
1

Pythons for ist nicht wie die for in Sprachen, die auf C-Syntax basieren. In Python iteriert for über eine Sequenz, während in C eine Schleife ausgeführt wird, während eine Bedingung wahr ist. Das ist ein grundlegender Unterschied.

Das C-like for kann grob durch folgenden Code ersetzt werden:

%Vor%

(Es gibt einige Komplikationen von break und continue , aber lassen Sie uns diese jetzt ignorieren.)

Dieses Umschreiben zeigt auch eine Möglichkeit, was Sie in Python machen wollen: Verwenden Sie while :

%Vor%

In Ihrem speziellen Fall ist es jedoch am einfachsten, for mit einer geeigneten Indexliste zu verwenden:

%Vor%

range gibt eine Liste von ganzen Zahlen (0, 1, 2, ...) zurück und Sie möchten, dass die Liste auf 5 oder die Länge Ihres Arrays, je nachdem, welcher Wert kleiner ist, gesetzt wird. Der obige Code erreicht das.

    
user25148 27.07.2011 04:57
quelle
0

Die for-Anweisung in Python iteriert eine "Liste" von Objekten (ich setze die Liste in Anführungszeichen, weil ich es im generischen Sinne meine, sie kann über alles, was iterierbar ist, iterieren).

Um eine bedingte Schleife zu codieren (anstatt bis zur Beendigung zu iterieren), verwenden Sie while:

%Vor%

Nun, um nur zu vervollständigen, könnte Ihr Beispiel auch wie folgt geschrieben werden:

%Vor%

oder:

%Vor%     
Mark Evans 27.07.2011 04:58
quelle

Tags und Links