Mehrere Anweisungen in Listenbeziehungen in Python?

9

Ist es möglich, etwas wie:

zu haben %Vor%

Ich habe das versucht, aber nicht funktioniert? Was ist die richtige Syntax, um diese zu schreiben?

EDIT: Die Druckanweisung war ein Beispiel. Tatsächlich inkrementiere ich einen Wert außerhalb der Schleife.

    
Joan Venge 21.04.2009, 22:14
quelle

9 Antworten

24

Anweisungen können nicht in Ausdrücke in Python eingehen; Es war eine Komplikation, die bewusst aus der Sprache heraus entwickelt wurde. Versuchen Sie für dieses Problem, eine Komplikation zu verwenden, die in die Sprache geschafft hat: Generatoren. Schau zu:

%Vor%

Der Generator führt eine laufende Zählung der bisher gesehenen Elemente durch und fügt sie jedem Element voran, so wie es aussieht, als ob Ihr Beispiel es versucht. Natürlich ist eine einfache Schleife noch einfacher, die oben eine leere Liste erstellt und nur append () aufruft! : -)

    
Brandon Rhodes 21.04.2009, 22:45
quelle
2

Ich bin mir nicht ganz sicher, was Sie versuchen, aber es ist wahrscheinlich so etwas wie

%Vor%

Die Anweisung im Listenverständnis muss eine einzelne Anweisung sein, aber Sie könnten immer einen Funktionsaufruf machen:

%Vor%     
David Z 21.04.2009 22:18
quelle
2

Hier ist ein Beispiel aus einer anderen Frage :

%Vor%

Der Enumerate-Generator gibt ein 2-Tupel zurück, das in i, x geht.

    
Charlie Martin 21.04.2009 22:20
quelle
2

Wie pjz gesagt hat, können Sie Funktionen verwenden. Hier können Sie eine Schließung verwenden, um den Zählerwert zu verfolgen:

%Vor%

Dann tust du was du willst mit list1:

%Vor%

Und jetzt mit nur zwei Zeilen erhalten wir list2:

%Vor%

Am Ende enthält list2:

%Vor%

was Sie wollten, und Sie können den Wert des Zählers nach der Schleife mit einem Aufruf erhalten:

%Vor%

Schließlich können Sie die Verschlusssachen durch jede Art von Operation ersetzen, die Sie wollen, hier haben wir ein Inkrement, aber es liegt ganz bei Ihnen. Beachten Sie auch, dass wir reduce verwenden, um list2 zu reduzieren, und dieser kleine Trick erfordert, dass Sie operator importieren, bevor Sie die Zeile mit reduce aufrufen:

%Vor%     
Manu 22.07.2009 16:33
quelle
1

Drucken ist eine komische Sache, wenn man ein Listenverständnis einträgt. Es würde helfen, wenn Sie uns zeigen, welche Ausgabe Sie wollen, nicht nur der Code, der nicht funktioniert.

Hier sind zwei Vermutungen für Sie. In jedem Fall ist der wichtige Punkt, dass die Wertangabe in einem Listenverständnis ein einzelner Wert sein muss. Sie können nicht mehrere Objekte gleichzeitig einfügen. (Wenn Sie das versuchen, fahren Sie mit dem zweiten Beispiel fort.)

%Vor%

Um eine flache Liste zu erhalten:

%Vor%

Bearbeiten: Das Erhöhen eines Wertes in der Mitte des Listenverständnisses ist immer noch seltsam. Wenn Sie es wirklich tun müssen, ist es besser, wenn Sie nur eine reguläre for-Schleife schreiben und Werte hinzufügen, während Sie fortfahren. In Python wird eine solche Schlauheit fast immer als "unpythonisch" gebrandmarkt. Tun Sie es, wenn Sie müssen, aber Sie werden kein Ende der Flak in Foren wie diesem bekommen. ;)

    
ojrac 21.04.2009 22:25
quelle
1

Für Ihr bearbeitetes Beispiel:

%Vor%

oder:

%Vor%

Listen comprehensions sind großartig, ich liebe sie, aber es ist nichts falsch mit der bescheidenen for Schleife und du solltest keine Angst haben, es zu benutzen: -)

EDIT: "Aber was, wenn ich anders als die gesammelten Werte erhöhen möchte?"

Nun, was willst du erhöhen? Sie haben die ganze Macht von Python auf Ihren Befehl!

Inkrement um x-Quadrat?

%Vor%

Erhöht um eine Funktion von x und seine Position in der Liste?

%Vor%     
John Fouhy 21.04.2009 23:46
quelle
1

Warum würden Sie eine doppelte Liste erstellen? Es scheint, als würde das ganze Listenverständnis nur den Inhalt summieren.

Warum nicht einfach.

%Vor%     
Matt 24.04.2009 06:02
quelle
0

Zunächst möchten Sie wahrscheinlich print nicht verwenden. Es gibt nichts zurück, also benutze eine konventionelle for -Schleife, wenn du nur Sachen ausdrucken willst. Was Sie suchen, ist:

%Vor%     
phihag 21.04.2009 22:18
quelle
0

Sie können nicht mehrere Anweisungen ausführen, aber Sie können einen Funktionsaufruf ausführen. Um das zu tun, was Sie oben zu haben scheinen, könnten Sie Folgendes tun:

%Vor%

im Allgemeinen, da List Comprehensions Teil des "funktionalen" Teils von Python sind, sind Sie auf ... Funktionen beschränkt. Andere Leute haben vorgeschlagen, dass Sie Ihre eigenen Funktionen schreiben können, wenn nötig, und das ist auch ein gültiger Vorschlag.

    
pjz 21.04.2009 22:36
quelle

Tags und Links