Ich stehe vor einem vielleicht etwas ungewöhnlichen Problem und erhoffe mir hier etwas Hilfe, da ich allein nicht auf die Lösung komme.
Mein Problem ist das folgende: Ich möchte einen inversen Filter schreiben. Das soll eine Methode sein, die als Argumente einerseits eine Liste und andererseits eine weitere Methode akzeptiert. Der Filter soll dann diejenigen Elemente aus der Liste zurückgeben (wieder als Liste), für die die übergebene Funktion False geliefert hat.
Ein Beispiel:
Die übergebene Methode prüft für jedes Element, ob es eine gerade Zahl ist und liefert True, falls das der Fall ist, sonst False.
Der Filter gibt dann entsprechend eine Liste ungerader Zahlen zurück (wenn man eine Liste mit Zahlen übergibt, versteht sich).
An sich ist diese Aufgabe nicht sonderlich schwer. Allerdings ist eine der Anforderungen an den Filter, dass er in weniger als 42 Zeichen realisiert werden soll (ist eine Idee von einem Professor von mir).
Meine bisherige Lösung:
Code: Alles auswählen
def k(l,f):return filter(lambda x:not f(x),l)
Beispiel für die Verwendung:
Code: Alles auswählen
liste=[1,2,3,4,5,6,7,8,9,0]
def k(l,f):return filter(lambda x:not f(x),l)
def testfunc(testee):
return testee % 2 == 0
newlist=k(liste,testfunc)
print newlist
Code: Alles auswählen
fi=filter
Also, nochmal meine Frage ganz konkret:
Hat jemand eine Idee, wie man die Zeile
Code: Alles auswählen
def k(l,f):return filter(lambda x:not f(x),l)
Notwendige Whitespaces zählen leider dazu...
Würde mich sehr über Anregungen bzw. Ideen freuen!
Greets und Danke schonmal - steps
P.S: Das ist keine Hausaufgabe oder so, sondern mehr ein Denkspiel (bin neu hier und habe gerade erst den Thread über Hausaufgaben etc. gelesen) und ich suche auch nicht nach einer vorgefertigten Lösung...hoffe, dass sich meine Anfrage im Rahmen befindet.