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 lambda a,b: a if (a > b) else b
funziona bene. Finora lambda x: x < 3 and x or None
sembra essere il più vicino che ho trovato.Python lambda con if ma senza altro
risposta
Un 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 impostazione predefinita funzioni restituiscono None
, in modo che si possa fare
lambda x: x if (x<3) else None
Ma forse quello che stai cercando è una list comprehension 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]
Cosa c'è che non va con lambda x: x if x < 3 else None
?
la mia comprensione è che di lista è più appropriato in questo scenario – zinking
La questione non menziona iterazione, quindi non sono sicuro di quello che vuoi dire. Puoi elaborare? – user4815162342
giusto, è solo una supposizione, probabilmente. -_- – zinking
Ci scusiamo per rianimare uno zombie.
ero alla ricerca di una risposta alla stessa domanda, e ho scoperto che "filtro" 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 entrambi i 2.xe 3. x: https://docs.python.org/2/library/functions.html#filter https://docs.python.org/3/library/functions.html#filter
Si può sempre provare ad invocare 'filtro' per i controlli condizionali. Fondamentalmente, map()
deve lavorare su ogni occorrenza dei iterables, 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 desidero creare una tupla di quadrati di soli numeri pari.
x = list(range(1,20))
y = tuple(map(lambda n: n**2, filter(lambda n: n%2==0,x)))
print (y)
- 1. Short hand If istruzione senza altro
- 2. ordinamento python senza espressioni lambda
- 3. Problemi con lambda Python
- 4. È un "if (...) return ...;" senza "altro" considerato buono stile?
- 5. Più istruzioni if in una funzione lambda
- 6. if altro rasoio non funziona
- 7. Python, lambda, trova minimo
- 8. ? operatore senza altro-parte
- 9. Python if: False vs 0.0
- 10. Valutazione differita con lambda in Python
- 11. lambda Python e scoping
- 12. C preprocessore con if
- 13. Come ordinare con lambda in Python
- 14. Python Lambda Identity Matrix
- 15. C# parametri lambda senza nome
- 16. Python lambda closure scoping
- 17. Boost Lambda/Phoenix - come fare lambda che restituisce un altro lambda?
- 18. Come eseguire un altro programma python senza ostacolare l'originale?
- 19. python if elif else statement
- 20. Funzione lambda Count/Loop Python
- 21. Aggiunta di funzioni lambda con lo stesso operatore in python
- 22. Array di filtri Java 8 con Lambda
- 23. Rspec dovrebbe cambiare il conteggio senza lambda
- 24. Python dichiarazione breve 'if-else'
- 25. Python if-else breve mano
- 26. i18n con gettext ma senza problemi locali?
- 27. Gestione dell'eccezione nella lambda senza try-catch nella lambda
- 28. Perché una variabile locale viene avviata nei costrutti if-else ma non nei costrutti if-else-if?
- 29. chiamata funzione in istruzione if senza parentesi
- 30. javascript stenografia if, senza la parte altra
@ ubuntu - grazie. Non sono sicuro del motivo per cui ho pensato che dovrebbe restituire Nessuno senza specificarlo. – root
Questa è una supposizione ragionevole poiché le funzioni restituiscono Nessuno per impostazione predefinita. La cosa importante da ricordare è che ciò che segue 'lambda x:' deve essere un * espressione *, non un'affermazione. – unutbu
@root A volte trovo utile pensare a un 'lambda' come se fosse in realtà scritto come' def lambda (x, y): return ... ' –