[Python-de] Denksportaufgabe: Beschraenktes Sortieren

Detlef Lannert lannert at uni-duesseldorf.de
Thu May 8 19:24:51 EDT 2003


René Liebscher <R.Liebscher at gmx.de> wrote:
> > Liefert ein IMO richtiges, aber nicht immer das "vorgesehene"
> > Ergebnis (bei Gleichheit der Sortierbegriffe wird hier nach der
> > Sequenz selbst weitersortiert).
> 
> In Python 2.2 (welches ich nicht habe) müsste dieses Problem mit dict()
> aus der Welt zu schaffen sein. Nur die Schlüssel werden sortiert.

Ja, richtig, das neue sort() sollte im Zweifel die ursprüngliche
Sortierfolge erhalten.

>  def sort(sequence, indices=[]):
>      auxdict = dict([([x[i] for i in indices], x) for x in sequence])
 
Es muß dann noch dict([(tuple([ ...]), x) ...]) heißen, weil Listen
nicht als Schlüssel von dicts verwendet werden können.

> Nicht extrem elegant aber statt x[i] in der zweiten Zeile
> 
> ((type(x) != types.InstanceType) and x) or x.__dict__)[i]

Wenn x nie als False gilt. In diesem Fall kann man wohl davon
ausgehen, denn wenn eine der Sequenzen leer wäre, dürften auch keine
Indizes spezifiziert sein, nach denen zu sortieren ist, und das
Ganze ist etwas sinnarm. Aber möglich wär's, und man müßte den
Trick

    (type(x) != types.InstanceType and [x] or [x.__dict__])[0][i]

anwenden. Oder vielleicht

    (hasattr(x, "__getitem__") and [x] or [x.__dict__])[0][i]

schreiben. <ausprobier /> Ja, funktioniert sogar!

Aber von Eleganz sprechen wir lieber nicht mehr ... ;-)

  Detlef




More information about the Python-de mailing list