Czy w Pythonie występuje funkcja odwrotna do filter
? To znaczy. utrzymuje pozycje w iteracji, że wywołanie zwrotne zwraca False
dla? Nie można znaleźć niczego.Czy jest wbudowany filtr() po przeciwnej stronie?
Odpowiedz
Nie, nie ma wbudowanej funkcji odwrotnej dla filter()
, ponieważ można po prostu odwrócić test. Wystarczy dodać not
:
positive = filter(lambda v: some_test(v), values)
negative = filter(lambda v: not some_test(v), values)
Moduł itertools
ma itertools.ifilterfalse()
, co jest raczej zbędny, ponieważ odwracanie logiczną testu jest tak prosta. Wersja itertools
zawsze działa jako generator.
Możesz to zrobić z itertools.filterfalse
lub jako Martijn sugeruje, umieścić not
gdzieś wewnątrz lambda, którego używasz w filtrze.
Inną opcją:
from operator import not_
compose = lambda f, g: lambda x: f(g(x))
...
ys = filter(compose(not_, predicate), values)
może mieć wstępnie walcowane wersję compose()
dostępnych (np funkcjonalnej lub toolz).
From 'komentarzu do Martijn Pieters s' s answerRoss Bencina:
Twoje rozumowanie nie jest bardzo przekonująca. W pierwszym przypadku może być już napisany
positive = filter(some_test, values)
zatem co jest proszony o powinny być co najmniej tak samo proste, jak
negative = filter(not(some_test), values)
Proponuję za pomocą prostej funkcji negującymi Wrapper:
def _not(func):
def not_func(*args, **kwargs):
return not func(*args, **kwargs)
return not_func
co pozwala napisać drugą linię jak wyżej (z dodanym podkreśleniem lub innym rozróżnieniem, ponieważ operator not
nie może i prawdopodobnie nie powinien być nadpisywany):
negative = filter(_not(some_test), values)
- 1. THREE.JS Cień po przeciwnej stronie światła
- 2. Jak przyspieszyć ładowanie strony po przeciwnej stronie planety?
- 3. matplotlib colorbar kleszczy na lewym/przeciwnej stronie
- 4. Domyślny filtr na stronie administratora
- 5. Funkcja matematyki przeciwnej znak?
- 6. Filtr agregacji po $ lookup
- 7. Czy kod zaplecza Meteora jest zawsze dostępny po stronie klienta?
- 8. CQRS - czy dozwolone jest wywoływanie strony czytającej po stronie zapisu?
- 9. Czy jest możliwe wykrycie animowanych obrazów po stronie klienta?
- 10. Android Proguard nie jest wbudowany
- 11. Obraz nie jest rozwiązywany po stronie prezentacji
- 12. Czy has_many wymaga belongs_to po drugiej stronie?
- 13. Czy PHP ma wbudowany optymalizator?
- 14. Logika po stronie klienta LUB logika po stronie serwera?
- 15. module.exports po stronie klienta
- 16. Przeglądarka po stronie serwera
- 17. Jak czekać po stronie klienta, aż połączenie z Mongo po stronie serwera jest gotowe?
- 18. Przekierowania po stronie serwera
- 19. Języki po stronie klienta
- 20. Dlaczego renderowanie HTML po stronie serwera jest szybsze niż po stronie klienta?
- 21. Wymuszanie uwierzytelniania Facebook: po stronie klienta i po stronie serwera
- 22. Reagowanie po stronie serwera i po stronie klienta nie jest płynne
- 23. Po stronie haka SVN
- 24. postincrement po lewej stronie
- 25. Alert po stronie obciążenia
- 26. CSS po stronie serwera?
- 27. Która metoda jest szybsza, ekspresowe: renderowanie po stronie serwera a renderowanie po stronie klienta
- 28. Czy wbudowany/blokowany Javascript jest wykonywany przed przygotowaniem dokumentu?
- 29. Kiedy korzystać po stronie klienta lub po stronie serwera?
- 30. wbudowany serwer php wbudowany buforowanie numer
Twoje uzasadnienie nie jest zbyt przekonujące. Pierwszy przypadek może już być zapisany jako "positive = filter (some_test, values)", więc to, o co proszą, powinno być co najmniej tak proste, jak 'negative = filter (not (some_test), values)' –
OSTROŻNIE! 'not' jest wbudowanym pythonem, który natychmiast analizuje wartość' True' lub 'False'. Obiekty funkcyjne oceniają na 'False', a filtr oczekuje funkcji tam, więc daje to TypeError, ponieważ pierwszy argument to Boolean. Inni czytelnicy uważajcie. – Multihunter
@Multihunter: a 'not' nie * nie jest wbudowane *. To operator. –