Estaba escribiendo algunas funciones lambda y no pude resolver esto. ¿Hay alguna 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.Python lambda con if pero sin más
Respuesta
Una 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 es x<3
. Por defecto funciones devuelven None
, por lo que podría hacer
lambda x: x if (x<3) else None
Pero quizás lo que busca es una lista por 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]
¿Qué pasa con lambda x: x if x < 3 else None
?
mi entendimiento es que la lista por comprensión es más apropiado en este escenario – zinking
La cuestión no menciona iteración, así que no estoy seguro de lo que quiere decir. ¿Puedes elaborar? – user4815162342
u derecha, es solo una suposición probablemente. -_- – zinking
Perdón por resucitar a un zombie.
que estaba buscando una respuesta a la misma pregunta, y me encontré con que "filtro" proporcionó exactamente lo que estaba buscando:
>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]
La aplicación es la misma en ambos 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 los controles condicionales. Fundamentalmente, map()
tiene que trabajar en cada aparición de los iterables, por lo que no puede 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)
- 1. Lambda "if"?
- 2. ordenación python sin expresiones lambda
- 3. Python lambda con expresión regular
- 4. lambda devuelve lambda en python
- 5. Python, lambda, busque mínimo
- 6. Python lambda function
- 7. Evaluación diferida con lambda en Python
- 8. Python if statement efficiency
- 9. Python - importar en if
- 10. Cómo ordenar con lambda en Python
- 11. Case vs If Else If: ¿Cuál es más eficiente?
- 12. Python Lambda Problems
- 13. C#: ¿Sin conversión implícita entre 'expresión lambda' y 'expresión lambda'?
- 14. Python Lambda Count/Loop Function
- 15. Legit python if statement?
- 16. Es if (var == true) más rápido que if (var! = False)?
- 17. Simple "SELECCIONAR" con variable pero sin "INTO"
- 18. Expresión lambda para la fecha más reciente
- 19. Estilo Python: sentencias if versus evaluación booleana
- 20. ¿Diferencia de firma entre lambda con/sin variable capturada?
- 21. Lambda con clases anidadas
- 22. ¿Qué significa `if name ==" __main __ "` en Python?
- 23. varargs en funciones lambda en Python
- 24. Atributo Constructor Con Lambda
- 25. Permitir instrucción if simple sin más no tener llaves en el código
- 26. Funciones generadoras de rizo interior con expresión lambda en Python
- 27. Python sentencia if: Falso vs. 0.0
- 28. Rspec debe cambiar la cuenta sin lambda
- 29. llamada Función de sentencia if sin paréntesis
- 30. lambda Python y la determinación del alcance
@ ubuntu - gracias. No estoy seguro de por qué asumí que debería devolver None sin especificarlo. – root
Esa es una suposición razonable ya que las funciones devuelven None por defecto. Lo importante a recordar es que lo que sigue a 'lambda x:' debe ser una * expresión *, no una declaración. – unutbu
@root A veces me resulta útil pensar en un 'lambda' como si realmente estuviera escrito como' def lambda (x, y): return ... ' –