Ist ein Filter () gegenüber eingebaut?

8

Gibt es in Python eine Funktion, die das Gegenteil von filter tut? I.e. behält die Items im iterable bei, für die der Callback False zurückgibt? Konnte nichts finden.

    
Aviv Cohn 29.11.2015, 22:56
quelle

4 Antworten

15

Nein, es gibt keine eingebaute Umkehrfunktion für filter() , weil Sie den Test einfach invertieren könnten . Fügen Sie einfach not :

hinzu %Vor%

Das itertools Modul hat itertools.ifilterfalse() , was ziemlich überflüssig ist weil das Invertieren eines booleschen Tests so einfach ist. Die itertools Version arbeitet immer als Generator.

    
Martijn Pieters 29.11.2015, 22:59
quelle
7

Sie können dies mit itertools.filterfalse oder als Martijn schlägt vor, fügen Sie ein not irgendwo in das Lambda, das Sie in Ihrem Filter verwenden.

    
El'endia Starman 29.11.2015 23:00
quelle
5

Eine andere Option:

%Vor%

Sie haben möglicherweise eine vorgerollte Version von compose() verfügbar (z. B. in funktionalem oder toolz ) ).

    
Ross Bencina 02.02.2016 09:46
quelle
0

Aus Ross Bencina 's Kommentar zu Martijn Pieters Antwort :

  

Ihre Argumentation ist nicht sehr überzeugend. Der erste Fall kann schon sein   geschrieben

%Vor%      

Daher sollte das, wonach gefragt wird, mindestens so einfach sein wie

%Vor%

Ich würde vorschlagen, eine einfache negierende Wrapper-Funktion zu verwenden:

%Vor%

ermöglicht das Schreiben der zweiten Zeile wie oben (mit dem zusätzlichen Unterstrich oder einer anderen Unterscheidung, da der Operator not nicht überschrieben werden kann und wahrscheinlich auch nicht überschrieben werden sollte):

%Vor%     
NichtJens 21.02.2018 17:09
quelle