bessere For-Loop-Syntax zum Erkennen leerer Sequenzen?

8

Gibt es eine bessere Möglichkeit, Folgendes zu schreiben:

%Vor%

Bitte beachten Sie, dass ich len (iterable_sequence) nicht verwenden kann, weil 1) nicht alle Sequenzen bekannte Längen haben; 2) In einigen Fällen kann das Aufrufen von len () das Laden der Elemente der Sequenz in den Speicher auslösen (wie es bei SQL-Abfrageergebnissen der Fall wäre).

Der Grund, warum ich frage, ist, dass ich einfach neugierig bin, ob es einen Weg gibt, um oberflächlicher und idiomatischer zu werden. Was ich suche ist in etwa wie folgt:

%Vor%

(unter der Annahme, dass "else" hier nur für leere Sequenzen funktioniert, was ich nicht weiß)

    
Dmitry B. 29.12.2010, 19:42
quelle

5 Antworten

7
%Vor%

Oder

%Vor%

In jedem Fall wird ein Element verbraucht, wenn es vorhanden ist.

Ein Beispiel für die Implementierung von empty_adapter() in den Kommentaren:

%Vor%

Sie können es wie folgt verwenden:

%Vor%

Der Sonderfall für eine leere Sequenz für einen allgemeinen Fall scheint falsch zu sein. Es sollte eine bessere Lösung für ein domänenspezifisches Problem geben.

    
jfs 29.12.2010, 19:46
quelle
3

Es könnte ein Job für itertools.tee sein Sie "triggern" die Sequenz bei der Verifizierung, aber Sie erhalten danach eine unberührte Kopie der Sequenz:

%Vor%

(es ist wert, dass tee hier das "richtige" Ding tut: Es lädt nur das erste Element der Sequenz in dem Moment, in dem check.next() ausgeführt wird - und dieses erste Element bleibt in sequence verfügbar. Die verbleibenden Elemente werden nur als Teil der for -Schleife abgerufen Oder halte es einfach: Wenn Sie len nicht verwenden können, können Sie aus denselben Gründen nicht überprüfen, ob die Sequenz einen bool-Wert von True hat.

Daher ist dein Weg einfach genug - Ein anderer Weg wäre, den Namen "item" vor der "for" -Anweisung zu löschen Überprüfen Sie, ob es nach der Schleife existiert:

%Vor%

Aber Ihr Code sollte so klar wie möglich verwendet werden.

    
jsbueno 29.12.2010 19:52
quelle
2

Das zweite Beispiel von J. F. Sebastian scheint das Ticket mit einer while-Schleife zu sein.

%Vor%

Nicht das prägnanteste, aber das objektiv klarste ... Mud, nein?

    
jlujan 29.12.2010 20:12
quelle
1

Dies sollte nicht len() :

auslösen %Vor%     
akaihola 19.12.2011 14:11
quelle
0
%Vor%     
Falmarri 29.12.2010 19:48
quelle

Tags und Links