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.

È stato utile?

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)
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top