Pregunta

Yo estaba escribiendo algunas de las funciones lambda y no podía darse cuenta de 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 ok.Hasta ahora lambda x: x < 3 and x or None parece ser la más cercana que he encontrado.

¿Fue útil?

Solución

Una lambda, como cualquier función, debe tener un valor de retorno.

lambda x: x if (x<3) no funciona porque no especifica qué volver si no x<3.Por defecto, las funciones devuelven None, por lo que podría hacer

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

Pero quizás lo que está buscando es una lista de comprensión con un if condición.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]

Otros consejos

¿Qué pasa con lambda x: x if x < 3 else None?

perdón de resucitar a un zombie.

Estaba buscando una respuesta a la misma pregunta, y encontré que "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 elegir y elegir.Pero el filtro puede ayudar a reducir las opciones.Por ejemplo, creo una lista de 1 a 19, pero desea 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)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top