Python Lambda con se ma senza altro
Domanda
Stavo scrivendo alcune funzioni Lambda e non riuscivo a capirlo.C'è un modo per avere qualcosa come lambda x: x if (x<3)
in Python?Come funziona lambda a,b: a if (a > b) else b
ok.Finora lambda x: x < 3 and x or None
sembra essere il più vicino che ho trovato.
Soluzione
A Lambda, come qualsiasi funzione, deve avere un valore di ritorno.
lambda x: x if (x<3)
non funziona perché non specifica cosa restituire se non x<3
.Per funzioni predefinite Ritorna None
, in modo da poter fare
lambda x: x if (x<3) else None
.
.
Ma forse quello che stai cercando è una comprensione dell'elenco con una condizione if
.Ad esempio:
In [21]: data = [1, 2, 5, 10, -1]
In [22]: [x for x in data if x < 3]
Out[22]: [1, 2, -1]
. Altri suggerimenti
Cosa c'è di sbagliato con lambda x: x if x < 3 else None
?
Scusa per rianimare uno zombi.
Stavo cercando una risposta alla stessa domanda, e ho scoperto che "filtro" ha fornito esattamente quello che stavo cercando:
>>> data = [1, 2, 5, 10, -1]
>>> filter(lambda x: x < 3, data)
[1, 2, -1]
.
L'implementazione è la stessa in 2.x e 3.x: https://docs.python.org/2/library/functions.html#filter. https://docs.python.org/3/library/functions.html#filter
È sempre possibile provare a richiamare il "filtro" per assegni condizionali.Fondamentalmente, map()
deve lavorare su ogni occorrenza deiterabili, quindi non può scegliere e scegliere.Ma il filtro può aiutare a restringere le scelte.Ad esempio, creo un elenco da 1 a 19 ma vuoi creare una tupla di quadrati di solo numeri pari.
x = list(range(1,20))
y = tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))
print (y)
.