Ich schrieb einige Lambda-Funktionen und konnte das nicht herausfinden. Gibt es eine Möglichkeit, in Python so etwas wie lambda x: x if (x<3)
zu haben? Als lambda a,b: a if (a > b) else b
funktioniert ok. Bis jetzt scheint lambda x: x < 3 and x or None
der nächste zu sein, den ich gefunden habe.Python Lambda mit wenn, aber ohne sonst
Antwort
Ein Lambda muss wie jede Funktion einen Rückgabewert haben.
lambda x: x if (x<3)
funktioniert nicht, weil es nicht angibt, was zurückgegeben werden soll, wenn nicht x<3
. Standardmäßig Funktionen geben None
, so könnten Sie
lambda x: x if (x<3) else None
Aber vielleicht tun, was Sie suchen ist eine Liste Verständnis mit einem if
Zustand. Zum Beispiel:
In [21]: data = [1, 2, 5, 10, -1]
In [22]: [x for x in data if x < 3]
Out[22]: [1, 2, -1]
Was ist los mit lambda x: x if x < 3 else None
?
mein Verständnis ist, dass Liste Verständnis geeignetere in diesem Szenario ist – zinking
Die Frage ist nicht Iteration nicht erwähnt, so dass ich bin mir nicht sicher, was du meinst. Kannst du es ausarbeiten? – user4815162342
du bist richtig, es ist wahrscheinlich nur eine Vermutung. -_- – zinking
Entschuldigung, um einen Zombie wiederzubeleben.
Ich war auf der Suche nach einer Antwort auf die gleiche Frage, und ich fand, dass „Filter“ zur Verfügung gestellt genau das, was ich suchte:
>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]
Die Implementierung beide gleich in 2.x und 3. x: https://docs.python.org/2/library/functions.html#filter https://docs.python.org/3/library/functions.html#filter
Sie können immer versuchen, aufzurufen, 'Filter' für die bedingte Kontrollen. Grundsätzlich muss map()
bei jedem Auftreten der iterables arbeiten, so dass es nicht auswählen kann. Aber Filter kann helfen, die Auswahl einzugrenzen. Ich erstelle zum Beispiel eine Liste von 1 bis 19, möchte aber ein Tupel von Quadraten mit nur geraden Zahlen erstellen.
x = list(range(1,20))
y = tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))
print (y)
- 1. JSON JQ wenn ohne sonst
- 2. Python Anprobe außer mit der, wenn sonst
- 3. python sort ohne Lambda-Ausdrücke
- 4. Inline wenn mit sonst
- 5. Kurzschrift mit sonst, wenn
- 6. Sonst ohne Wenn Fehler für mehrere Ereignisse
- 7. Python, wenn/sonst Befehl nicht funktioniert?
- 8. Javascript wenn sonst Kurzschrift
- 9. Python idiomatische Python für Schleife wenn sonst Anweisung
- 10. Stenografie wenn sonst mit Rasiermesser
- 11. Python Lambda mit Regex
- 12. Bedingte Tenary ohne sonst
- 13. wenn sonst mit 2 Textvariablen
- 14. Python Lambda mit Listenverständnis
- 15. Python-Schleife mit Standardwert sonst unendlich
- 16. Rubin-ternärer Operator ohne sonst
- 17. Python elif sonst SyntaxError
- 18. Java- Wenn sonst Logik
- 19. java wenn sonst Aussage
- 20. C#, wenn sonst Abkürzung
- 21. C# wenn sonst Ausnahme
- 22. Code funktioniert in JSFiddle-Umgebung, aber nicht, wenn sonst ausgeführt
- 23. Wenn sonst Javascript Fehler
- 24. Golang wenn/sonst nicht kompilieren
- 25. Haskell „nichts tun“ IO, oder wenn ohne sonst
- 26. Javascript überspringt sonst wenn?
- 27. MySql Wenn sonst Bedingung
- 28. wenn sonst Verzweigung in jinja2
- 29. AWS Python Lambda mit Oracle
- 30. Awk wenn sonst Probleme
@ ubuntu - danke. Ich bin mir nicht sicher, warum ich angenommen habe, dass es niemanden zurückgeben sollte, ohne es zu spezifizieren. – root
Das ist eine vernünftige Annahme, da Funktionen standardmäßig None zurückgeben. Das Wichtigste, an das man sich erinnern sollte, ist, dass das folgende "Lambda x:" ein * Ausdruck * sein muss, keine Aussage. – unutbu
@root Manchmal finde ich es praktisch, an ein 'Lambda' zu denken, als ob es tatsächlich als' def Lambda (x, y): return ... 'geschrieben wäre –