J'écrivais des fonctions lambda et je ne pouvais pas comprendre cela. Existe-t-il un moyen d'avoir quelque chose comme lambda x: x if (x<3)
en python? Comme lambda a,b: a if (a > b) else b
fonctionne bien. Jusque là lambda x: x < 3 and x or None
semble être le plus proche que j'ai trouvé.
Un lambda, comme toute fonction, doit avoir une valeur de retour.
lambda x: x if (x<3)
ne fonctionne pas car il ne spécifie pas quoi renvoyer sinon x<3
. Par défaut, les fonctions retournent None
, vous pouvez donc faire
lambda x: x if (x<3) else None
Mais peut-être que vous cherchez une compréhension de liste avec une condition if
. Par exemple:
In [21]: data = [1, 2, 5, 10, -1]
In [22]: [x for x in data if x < 3]
Out[22]: [1, 2, -1]
Quel est le problème avec lambda x: x if x < 3 else None
?
Désolé de ressusciter un zombie.
Je cherchais une réponse à la même question, et j'ai trouvé que le "filtre" fournissait exactement ce que je cherchais:
>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]
L'implémentation est la même dans les versions 2.x et 3.x: https://docs.python.org/2/library/functions.html#filterhttps: // docs .python.org/3/library/functions.html # filter
Vous pouvez toujours essayer d'appeler "filtre" pour les vérifications conditionnelles. Fondamentalement, map()
doit travailler sur chaque occurrence des itérables, donc elle ne peut pas choisir. Mais le filtre peut aider à affiner les choix. Par exemple, je crée une liste de 1 à 19 mais je veux créer un Tuple of carrés de nombres pairs seulement.
x = list(range(1,20))
y = Tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))
print (y)