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.
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! : -)
Hier ist ein Beispiel aus einer anderen Frage :
%Vor%Der Enumerate-Generator gibt ein 2-Tupel zurück, das in i, x geht.
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%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. ;)
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%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.
Tags und Links python list-comprehension