AW: [Python-de] Funktionale Denksportaufgabe

Gregor Lingl glingl at aon.at
Thu Sep 26 22:56:19 EDT 2002


Rainer Fischbach schrieb:

>At 19:08 26.09.2002 +0200, you wrote:
>  
>
>>Losung ohne List Comprehension
>>
>>filter1 = lambda f,s:not f and s or (lambda y=[]:(map(lambda x:f(x) and
>>(y.append(x),),s),y))()[1]
>>
>># test
>>f = lambda x: not (x % 3)
>>
>>s = range(10)
>>print filter1(None,s)
>>print filter1(f,s)
>>print s
>>
>>
>>    
>>
>Ob man list comprehensions oder map/reduce als Primitive nimmt, ist
>Geschmacksache (wenn man ganz elementar sein möchte, 
>
Das wollte ich! Ganz elementar und ganz natürlich!

>kann man auch alles
>nur mit lambda machen). 
>
(Ich glaub' eine nur mit lambda , ja sogar mit NUR EINEM lambda
war noch nicht darunter) Daher:

recfil = lambda p, seq, res=[]: (
    p is None and [seq] or
    seq == [] and [res] or
    not p(seq[0]) and [recfil( p, seq[1:], res)] or
    [recfil( p, seq[1:], res + seq[:1] )] )[0]

den Listenverpackungs-0-Indizierungstrick kann man sich hier
*natürlich* nicht sparen, da ja res leer sein kann, je nach 
p und seq.

Das Folgende bleibt allerdings unnatürlicherweise weiter aufrecht, G.L:

>Wesentlich klarer und eleganter ist das folgende:
>
>rfil = lambda p, seq: (p == None and seq or
>                       reduce (lambda s, x: p (x) and s + [x] or s, seq, []))
>
>den Listenverpackungs-0-Indizierungstrick kann man sich hier sparen, da in
>dem Fall, wenn seq zu false evaluiert, die Faltungsfunktion ohnehin nicht
>zur Anwendung kommt und innerhalb der Faltungsfunktion [x] immer zu true
>evaluiert. 
>
>Übrigens kann man auch map durch reduce ausdrücken:
>
>rmap = lambda f, seq: reduce (lambda s, x: s + [f (x)], seq, [])
>
>sl, Rainer
>
>     
>    Rainer Fischbach
>______________________________________________________
>
>    ECS
>    Engineering Consulting & Solutions GmbH
>    Muehlstrasse 3
>    D-92318  Neumarkt
>
>    Phone:               +49 (0)9181 - 4764-84
>    Fax:                 +49 (0)9181 - 4764-50
>    Mobile:              +49 (0)171  - 41 41 570
>    e-mail:              fischbach at ecs-gmbh.de
>    WWW:                 http://www.ecs-gmbh.de
>______________________________________________________
>
>
>
>_______________________________________________
>Python-de maillist  -  Python-de at starship.python.net
>http://starship.python.net/mailman/listinfo/python-de
>
>
>  
>








More information about the Python-de mailing list