[Python-de] Denksportaufgabe: Beschraenktes Sortieren

René Liebscher R.Liebscher at gmx.de
Thu May 8 16:11:25 EDT 2003


Dinu Gherman schrieb:
> 
> René Liebscher:
> 
> > Also ich habe das or nur mittels lambda in reduce bekommen, or alleine
> > wollte der nicht. Habe ich da eine Möglichkeit übersehen?
> > Und ich vertraue darauf das das or nur bis zum ersten Nicht-0 wirklich
> > durchrechnet und dann sein Ergebnis nicht mehr ändert.
> >
> > def sort(input,indizes):
> >       input.sort(lambda a,b,indizes=indizes:reduce(lambda x,y:x or
> > y,[cmp(a[i],b[i]) for i in indizes]))
> >       return input
> 
> Prima - bestehend kurz! Kuerzer geht's wohl nimmer! Wenn auch ein
> kleiner Brainteaser! ;-)
> 
> Allerdings frage ich mich auch, wieso reduce(operator.or_, ...) nicht
> funktioniert (die 2 kommt beim Vergleichen natuerlich nicht vor...)?
> 
>    >>> 0 or 1 or 2
>    1
>    >>> reduce(operator.or_, [0, 1, 2])
>    3
> 
> Aha, es ist ein binaeres ODER, ein logisches scheint es nicht zu ge-
> ben (komisch, jetzt, wo es Booleans gibt)! D.h. man muss fummeln bis
> man z.B. zu diesem als Ersatz fuer Dein reduce kommt (was sicher
> *nicht* schoener ist):
> 
>    (filter(lambda x:x!=0, [...]) or [0])[0]
> 
Ok, da kann ich auch gegenhalten ;-)  (auch ohne logisches or)

      reduce(lambda x,y: [x,y][x==0],[...])

Wobei [x,y][x==0] dasselbe wie or macht.

> ...

MfG
René Liebscher




More information about the Python-de mailing list