For-Schleifen (Anfänger)

7

Ich habe vor kurzem begonnen, Python zu lernen, und das Konzept der for-Schleifen ist für mich immer noch etwas verwirrend. Ich verstehe, dass es im Allgemeinen dem Format for x in y folgt, wobei y nur eine Liste ist.

Die für jede Schleife for (int n: someArray) wird for n in someArray ,

Und die for-Schleife for (i = 0; i < 9; i-=2) kann durch for i in range(0, 9, -2)

dargestellt werden

Angenommen, anstelle eines konstanten Inkrements wollte ich i*=2 oder sogar i*=i . Ist das möglich, oder müsste ich stattdessen eine while-Schleife verwenden?

    
user1320925 03.05.2012, 23:00
quelle

5 Antworten

11

Wie Sie sagen, durchläuft eine for -Schleife die Elemente einer Liste. Die Liste kann alles enthalten, was Sie möchten, damit Sie eine Liste erstellen können, die jeden Schritt enthält.

Eine for -Schleife kann auch über einen "Generator" iterieren, bei dem es sich um ein kleines Stück Code handelt eine aktuelle Liste. In Python ist range() eigentlich ein Generator (in Python 2.x hingegen lieferte range() eine Liste, während xrange() der Generator war).

Zum Beispiel:

%Vor%

Die obige for Schleife wird gedruckt

%Vor%

und so weiter, bis Sie Strg + C drücken.

    
Greg Hewgill 03.05.2012 23:08
quelle
8

Sie können einen Generatorausdruck verwenden, um dies effizient und mit wenig überschüssigem Code zu tun:

%Vor%

Generatorausdrücke funktionieren genauso wie das Definieren eines manuellen Generators (wie in Greg Hewgills Antwort ), mit einer Syntax, die a ähnelt Listenverständnis. Sie werden träge bewertet - was bedeutet, dass sie zu Beginn der Operation keine Liste generieren, was bei großen Iterablen eine viel bessere Leistung bewirken kann.

Dieser Generator arbeitet also, indem er wartet, bis er nach einem Wert gefragt wird, dann fragt range(10) nach einem Wert, verdoppelt diesen Wert und gibt ihn an die for -Schleife zurück. Dies geschieht so oft, bis der range() Generator keine weiteren Werte mehr liefert.

    
Gareth Latty 03.05.2012 23:15
quelle
5

Beachten Sie, dass der Listen-Teil von Python eine beliebige iterierbare Sequenz sein kann.

Beispiele:

Eine Zeichenfolge:

%Vor%

Eine Datei:

%Vor%

Ein Wörterbuch:

%Vor%

Ein Stück einer Liste:

%Vor%

usw. usw. etc usw.

Also ist es wirklich viel tiefer als "nur eine Liste"

Wie andere bereits gesagt haben, setze einfach das iterable so, wie es für deine Beispielfragen sein soll:

%Vor%     
user688635 03.05.2012 23:19
quelle
1

Sie sollten dafür Aufzählungen verwenden

%Vor%

und

%Vor%

Die Syntax des Listenverständnisses lautet wie folgt:

%Vor%

Unter der Haube verhält es sich ähnlich wie die Karten- und Filterfunktion :

%Vor%

Beispiel gegeben:

%Vor%

und

%Vor%

Dies kann als alternativer Ansatz verwendet werden, wenn Sie keine Listenergänzungen mögen. Du könntest auch eine for-Schleife verwenden, aber das würde weg von Python idiomatisch sein ...

    
Tom Wijsman 03.05.2012 23:08
quelle
0

Nur für eine Alternative, wie wäre es mit der Verallgemeinerung der Iterate / Inkrement-Operation zu einer Lambda-Funktion, so dass Sie so etwas tun können:

%Vor%

Dabei ist seq wie folgt definiert:

%Vor%

Der Unterschied in der Leistung ist nicht so viel:

%Vor%

[BEARBEITEN]

Zur Unterstützung der umgekehrten Iteration und mit einem Standardargument ...

%Vor%

Hinweis: Dies verhält sich anders als range / xrange , wobei die Richtung < / > Test durch das Iteratorzeichen und nicht durch die Differenz zwischen Start- und Endwerten ausgewählt wird.

    
jozxyqk 25.11.2013 10:01
quelle

Tags und Links