Wie man eine generierte Sequenz kennt, ist höchstens eine bestimmte Länge

8

Ich möchte wissen, ob eine generierte Sequenz weniger als 2 Einträge hat.

%Vor%

Meine ineffiziente Methode besteht darin, eine Liste zu erstellen und ihre Länge zu messen:

%Vor%

Offensichtlich verbraucht dies den ganzen Generator.

In meinem realen Fall könnte der Generator ein großes Netzwerk durchqueren. Ich möchte die Überprüfung durchführen, ohne den gesamten Generator zu verbrauchen oder eine große Liste zu erstellen.

Es gibt ein Rezept in der itertools-Dokumentation :

%Vor%

Dies erstellt nur eine Liste der maximalen Länge n , was besser ist.

So könnte ich sagen:

%Vor%

Gibt es eine noch pythischere, effizientere Art, das zu tun?

    
Peter Wood 24.09.2015, 08:46
quelle

2 Antworten

0

Die Lösung, die take verwendet, verwendet islice , erstellt eine Liste und nimmt die Länge davon an:

%Vor%

Um das Erstellen der Liste zu vermeiden, können wir sum :

verwenden %Vor%

Dies dauert etwa 70% der Zeit:

%Vor%

Einpacken:

%Vor%     
Peter Wood 25.09.2015, 11:43
quelle
7

Ab Python 3.4 können Generatoren einen Längenhinweis implementieren. Wenn ein Generator dies implementiert, wird er durch die Methode object.__length_hint__() .

Sie können es mit der Funktion operator.length_hint() testen.

Wenn nicht verfügbar ist, besteht Ihre einzige Option darin, Elemente zu konsumieren, und Ihre Verwendung des take() -Rezepts ist der effizienteste Weg, dies zu tun:

%Vor%     
Martijn Pieters 24.09.2015 08:52
quelle

Tags und Links