[Python-de] Funktionale Denksportaufgabe

Rainer Fischbach fischbach at ecs-gmbh.de
Thu Sep 26 13:27:34 EDT 2002


At 12:00 26.09.2002 +0200, you wrote:
>Dinu Gherman wrote:
>> 
>> ...
>>
>> def filter1(func, seq):
>>      if func == None:
>>          return seq
>>      return [x for x in seq if func(x)]
>> 
>> Dinu
>
>Ich frage mich gerade, ob man nicht auch noch die Abfrage func==None
>irgendwie
>in das if reinbekommt (mit and oder or)???
>

ja, das geht

def filter1(func, seq):
     return [x for x in seq if func == None or func(x)]

allerdings fühst Du dann den None-Test für jedes Listenelement durch, was
redundant ist
(kürzer Text --> längere Lufzeit!). Das von Dinu spezifizierte Verhalten
weicht übrigens von dem der eingebauten Funktionen ab.

Die eingebaute Funktionen map und filter behandeln None als
Identitätsfunktion (lambda x: x) und nicht als konstante Funktion (lambda
x: 1), was im Falle von map erwünscht ist, hier jedoch dazu führt, dass
alles, was logisch falsch ist, durch den Rost fällt.

>>> filter (None, [12, 2, 12, 13, 16, 8, 3, 19, 3, 6, 22, 7])
[12, 2, 12, 13, 16, 8, 3, 19, 3, 6, 22, 7]

>>> filter (None, [12, 2, 0, 12, [], 13, 16, 8, 3, 19, 3, 6, 22, 7])
[12, 2, 12, 13, 16, 8, 3, 19, 3, 6, 22, 7]

ciao, 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
______________________________________________________






More information about the Python-de mailing list