Frage

Ich habe einige Lambda-Funktionen geschrieben und konnte das nicht herausfinden.Gibt es eine Möglichkeit, so etwas zu haben? lambda x: x if (x<3) in Python?Als lambda a,b: a if (a > b) else b funktioniert ok.Bis jetzt lambda x: x < 3 and x or None Scheint das nächstgelegene zu sein, was ich gefunden habe.

War es hilfreich?

Lösung

Ein Lambda muss wie jede Funktion einen Rückgabewert haben.

lambda x: x if (x<3) funktioniert nicht, da nicht angegeben wird, was zurückgegeben werden soll, wenn nicht x<3.Standardmäßig kehren Funktionen zurück None, also könntest du es tun

lambda x: x if (x<3) else None

Aber vielleicht suchen Sie nach einem Listenverstä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]

Andere Tipps

Was ist falsch mit lambda x: x if x < 3 else None?

Tut mir leid, einen Zombie wiederbeleben zu müssen.

Ich suchte nach einer Antwort auf dieselbe Frage und fand, dass „Filter“ genau das lieferte, was ich suchte:

>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]

Die Implementierung ist in 2.x und 3.x gleich:https://docs.python.org/2/library/functions.html#filter https://docs.python.org/3/library/functions.html#filter

Sie können jederzeit versuchen, „Filter“ für bedingte Prüfungen aufzurufen.Grundsätzlich gilt: map() muss an jedem Vorkommen der Iterables arbeiten, kann also nicht auswählen.Der Filter kann jedoch dabei helfen, die Auswahl einzugrenzen.Ich erstelle beispielsweise eine Liste von 1 bis 19, möchte aber ein Tupel erstellen von Quadrate nur aus geraden Zahlen.

x = list(range(1,20))

y = tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))

print (y)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top