Question

J'ai écrit quelques lambda fonctions et ne pouvait pas comprendre cela.Est-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 ok.Jusqu'à présent lambda x: x < 3 and x or None semble être le plus proche que j'ai trouvé.

Était-ce utile?

La solution

Un lambda, comme n'importe quelle fonction doit retourner une valeur.

lambda x: x if (x<3) ne fonctionne pas car il ne précise pas de quoi retourner si ce n' x<3.Par défaut, les fonctions de retour None, de sorte que vous pourriez faire

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

Mais peut-être que vous êtes à la recherche d'une compréhension de liste avec un if condition.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]

Autres conseils

Quel est le problème avec lambda x: x if x < 3 else None?

Désolé pour le réanimer un zombie.

Je cherchais une réponse à la même question, et j'ai trouvé que "filtre" apporté exactement ce que je cherchais:

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

La mise en œuvre est la même dans les deux 2.x et 3.x:https://docs.python.org/2/library/functions.html#filter https://docs.python.org/3/library/functions.html#filter

Vous pouvez toujours essayer de les appeler "filtre" pour les conditionnelle des contrôles.Fondamentalement, map() à chaque occurrence de l'iterables, de sorte qu'il ne peut pas choisir.Mais le filtre peut aider à affiner le choix.Par exemple, j'ai créer une liste de 1 à 19 et souhaitez créer un tuple de les places de seulement un nombre pair.

x = list(range(1,20))

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

print (y)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top