functions - python lambda aws
Python lambda con si pero sin otra cosa (4)
¿Qué hay de malo con lambda x: x if x < 3 else None
?
Estaba escribiendo algunas funciones lambda y no podía resolver esto. ¿Hay una manera de tener algo como lambda x: x if (x<3)
en python? Como lambda a,b: a if (a > b) else b
funciona bien. Hasta ahora, lambda x: x < 3 and x or None
parece ser lo más cercano que he encontrado.
Perdón por resucitar a un zombie.
Estaba buscando una respuesta a la misma pregunta y encontré que el "filtro" proporcionaba exactamente lo que estaba buscando:
>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]
La implementación es la misma en 2.x y 3.x: https://docs.python.org/2/library/functions.html#filter https://docs.python.org/3/library/functions.html#filter
Siempre puede intentar invocar ''filtro'' para verificaciones condicionales. Fundamentalmente, map()
tiene que trabajar en cada aparición de los iterables, por lo que no puede seleccionar y elegir. Pero el filtro puede ayudar a reducir las opciones. Por ejemplo, creo una lista del 1 al 19, pero quiero crear una tupla de cuadrados de solo números pares.
x = list(range(1,20))
y = tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))
print (y)
Un lambda, como cualquier función, debe tener un valor de retorno.
lambda x: x if (x<3)
no funciona porque no especifica qué devolver si no x<3
. Por defecto las funciones devuelven None
, por lo que podrias hacer
lambda x: x if (x<3) else None
Pero tal vez lo que está buscando es una lista de comprensión con una condición if
. Por ejemplo:
In [21]: data = [1, 2, 5, 10, -1]
In [22]: [x for x in data if x < 3]
Out[22]: [1, 2, -1]