[Python-de] Denksportaufgabe: Beschraenktes Sortieren

Detlef Lannert lannert at uni-duesseldorf.de
Thu May 8 16:37:53 EDT 2003


> In Anbetracht des weiter verschobenen Berliner Python-Treffens habe
> ich mir mal wieder eine kleine Denksportaufgabe ausgedacht, wenn's
> recht ist?

Sicher darf man auch als Nichtberliner mitdenken?!

> Gesucht ist eine Sortierfunktion sort(sequence, indices=[]), die
> "Sequenzen von Sammelobjekten" nach ganz bestimmten Indices (und nur
> auf diese beschraenkt) sortiert zurueckgibt. Mit "Sammelobjekten"
> sind hier Listen, Dictionaries und Strings gemeint (bei Dictionaries
> sind die Indices also die Schluessel). Sammelobjekte duerfen ver-
> schieden gross sein, mussen aber alle ueber die gewuenschten Indices
> verfuegen.

Mein Vorschlag:

def sort(sequence, indices=[]):
    auxlist = [([x[i] for i in indices], x) for x in sequence]
    auxlist.sort()
    return [x[1] for x in auxlist]

Liefert ein IMO richtiges, aber nicht immer das "vorgesehene"
Ergebnis (bei Gleichheit der Sortierbegriffe wird hier nach der
Sequenz selbst weitersortiert).

Schlägt sicher nicht den Rekord für die kürzeste Lösung, aber angesichts
der Unbeliebtheit von map & Co. in gewissen Kreisen würde ich diesen
Vorschlag als "ziemlich pythonisch" ansehen ;-)) ...

Damit ist allerdings noch nicht der Zugriff auf Attribute von Objekten
abgehakt. Nach einer _eleganten_ Lösung dafür suche ich noch ...

  Detlef




More information about the Python-de mailing list