[Python-de] Denksportaufgabe: Beschraenktes Sortieren

René Liebscher R.Liebscher at gmx.de
Thu May 8 12:04:53 EDT 2003


Dinu Gherman schrieb:
> 
> Hallo!
> 
> In Anbetracht des weiter verschobenen Berliner Python-Treffens habe
> ich mir mal wieder eine kleine Denksportaufgabe ausgedacht, wenn's
> recht ist?
> 
> 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.
> 

> ...

> 
> Cui bono? Jedem, der Listen/Arrays von Datensaetzen/Records und Fel-
> dern nach bestimmten Indices/Schluesseln sortieren moechte, ohne die
> Reihenfolge anderer "unbeteiligter" Elemente zu veraendern.
> 
> Jetzt kommt's: die besondere Anforderung hierbei lautet wie folgt.
> Die Loesung muss "pythonisch" sein (was auch immer das allgemein
> heissen mag)! Hierbei heisst es, der Code der Sortierfunktion muss
> selbst auch sehr beschraenkt sein, und darf nur ca. 4-5 Zeilen (ca.
> 200 Zeichen) enthalten!


Also ich würde das wie unten probieren:
(Vorausgesetzt das ich das inplace sortieren darf, ansonsten wäre noch
irgendwo ein kopieren fällig.)

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



> 
> Sonderpunkte gibt es fuer denjenigen, der seine Loesung auf Struct-
> aehnliche Instanzobjekte mit Attributen als Schluessel erweitert!

a[i],b[i] im cmp durch getattr(a,i),getattr(b,i) ersetzen. 


> 
> Viel Vergnuegen! ;-)
> 
> Dinu
> 

MfG
Rene Liebscher




More information about the Python-de mailing list