Esiste una funzione in Python che fa l'opposto di filter
? Cioè mantiene gli articoli nel iterable che la callback restituisce False
per? Non ho trovato nulla.C'è un filtro() opposto incorporato?
risposta
No, non esiste una funzione inversa incorporata per filter()
, perché è possibile semplicemente invertire . Basta aggiungere not
:
positive = filter(lambda v: some_test(v), values)
negative = filter(lambda v: not some_test(v), values)
Il modulo itertools
ha itertools.ifilterfalse()
, che è piuttosto ridondante perché invertendo un test booleano è così semplice. La versione itertools
funziona sempre come un generatore.
È possibile farlo con itertools.filterfalse
o come Martijn suggerisce, inserire un not
da qualche parte all'interno del lambda che si utilizza nel filtro.
Un'altra opzione:
from operator import not_
compose = lambda f, g: lambda x: f(g(x))
...
ys = filter(compose(not_, predicate), values)
si può avere una versione pre-laminati di compose()
disponibili (per esempio in funzionale o toolz).
Da 's commento a Martijn Pieters' Ross Bencina s answer:
tuo ragionamento non è molto convincente. Il primo caso si può già scritto
positive = filter(some_test, values)
quindi ciò che viene chiesto dovrebbe essere almeno così semplice come
negative = filter(not(some_test), values)
Io suggerirei di usare una semplice funzione di negazione avvolgitore:
def _not(func):
def not_func(*args, **kwargs):
return not func(*args, **kwargs)
return not_func
che consente di scrivere la seconda riga come sopra (con il carattere di sottolineatura aggiunto o altra distinzione, poiché l'operatore not
non può e probabilmente non dovrebbe essere sovrascritto):
negative = filter(_not(some_test), values)
- 1. Mongoengine - Filtro documenti incorporato
- 2. opposto di un Inner Join Query
- 3. Java/Jetty: Come aggiungere il filtro al jetty incorporato
- 4. Jquery opposto di .hasClass()?
- 5. JavaScript - opposto a toString()?
- 6. Opposto di git add -p
- 7. Opposto di Python per ... altro
- 8. opposto del comando 'git status'
- 9. Panda opposto di fillna (0)
- 10. query mongodb opposto a $ all
- 11. 'upsert' in un documento incorporato
- 12. Le rotaie hanno un opposto di `parameterize` per le stringhe?
- 13. Esiste un opposto del metodo Tutto di LINQ?
- 14. C'è un opposto a 'vai alla definizione' in Visual Studio?
- 15. C'è un opposto di includere? per gli array di rubini?
- 16. C'è un opposto della continuazione della linea di sottolineatura (_)?
- 17. Server Java incorporato o non incorporato
- 18. Imposta colore di sfondo: opposto di -transparent
- 19. variabili php per serie - opposto di "estrarre"
- 20. Creazione di un filtro NSP per un filtro
- 21. MongoDB opposto di $ addToSet a '$ removeFromSet'
- 22. LESS/SASS CSS opposto a minificazione/ottimizzazioni?
- 23. Java - Opposto di .contains (non contiene)
- 24. Opposto di aspnet_regiis -ga <UserName>
- 25. Graphviz: Posto etichetta bordo sul lato opposto
- 26. THREE.JS Ombra sul lato opposto della luce
- 27. incorporato PostgreSql
- 28. Come aggiornare un documento incorporato in un documento incorporato in mangusta?
- 29. Come eseguire un eseguibile incorporato come risorsa
- 30. GORM dove interrogazione su un oggetto incorporato
Il tuo ragionamento non è molto convincente. Il primo caso può essere già scritto 'positivo = filtro (alcuni_test, valori)' quindi ciò che viene chiesto dovrebbe essere almeno tanto semplice come 'negativo = filtro (non (alcuni_test), valori)' –
ATTENZIONE! 'not' è un builtin in python che valuta immediatamente sia' True' o 'False'. Gli oggetti funzione valutano 'False', e il filtro si aspetta una funzione lì, quindi questo ti darà un errore TypeE perché il primo argomento è un booleano. Gli altri lettori sono attenti. – Multihunter
@Multihunter: and 'not' è * non un built-in *. È un operatore. –