Aktualisieren von Objekteigenschaften in Listenverstehensart

8

Ist es in Python möglich, eine Liste von Objekten im Listenverständnis oder auf ähnliche Weise zu aktualisieren? Zum Beispiel möchte ich die Eigenschaft aller Objekte in der Liste festlegen:

%Vor%

oder mit map -Funktion

%Vor%

Könnte es erreicht werden, ohne die Eigenschaftseinstellung zu durchlaufen?

(Hinweis: alle obigen Beispiele sind absichtlich falsch und nur zur Verfügung gestellt, um die Idee auszudrücken)

    
rook 20.05.2013, 13:13
quelle

1 Antwort

20

Letztendlich ist die Zuweisung eine "Anweisung", kein "Ausdruck", daher kann sie nicht in einem Lambda-Ausdruck oder Listenverständnis verwendet werden. Sie benötigen eine reguläre Funktion, um das zu erreichen, was Sie versuchen.

Es gibt einen Built-in, der es macht (gibt eine Liste von None zurück):

%Vor%

Aber bitte benutze es nicht. Verwenden Sie einfach eine Schleife. Ich bezweifle, dass Sie einen Unterschied in der Effizienz feststellen werden und eine Schleife ist so viel klarer.

Wenn Sie wirklich einen 1-Liner brauchen (obwohl ich nicht sehe warum):

%Vor%

Ich finde, dass die meisten Leute List-Comprehensions verwenden wollen, weil jemand ihnen gesagt hat, dass sie "schnell" sind. Das ist richtig, aber nur zum Erstellen einer neuen Liste. Die Verwendung eines Listenverständnisses für Nebenwirkungen führt wahrscheinlich nicht zu einem Leistungsvorteil und Ihr Code leidet unter der Lesbarkeit. Wirklich, der wichtigste Grund, ein Listenverständnis statt der äquivalenten Schleife mit .append zu verwenden, ist, dass es einfacher zu lesen ist.

    
mgilson 20.05.2013, 13:19
quelle

Tags und Links