Inverser Filter in unter 42 Zeichen?
Verfasst: Mittwoch 21. Januar 2009, 10:54
Hallo zusammen!
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:
Das sind 45 Zeichen, wenn ich mich nicht verzählt habe.
Beispiel für die Verwendung:
Für die Zahl der Zeichen gilt nur die Filter-Funktion selbst, der Rest ist nur zum Testen. Entsprechend sind Abkürzungen wie nicht drin, da sie den Code sogar noch verlängern würden.
Also, nochmal meine Frage ganz konkret:
Hat jemand eine Idee, wie man die Zeile
auf weniger als 42 Zeichen reduziert, wobei sie natürlich weiterhin die bisherige Funktionalität behalten soll?
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.
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.