[Python-de] Noch eine Denksportaufgabe
Gerhard Häring
haering_python at gmx.de
Thu Oct 10 18:57:21 EDT 2002
* Axel_Gerke at peacock.de <Axel_Gerke at peacock.de> [2002-10-10 16:30 +0100]:
>
> Hallo zusammen,
>
> Tino Wildenhain und meine Wenigkeit haben mal diese nette Aufgabe
> durchgesprochen
> und sind zu folgender Lösung gekommen:
>
> >>> def nrotate(l,n):
> ... n=n % len(l) # bound checking
> ... return l[-n:]+l[:-n]
Der Haken bei eurer Lösung ist, dass sie nach dem Kriterium "versuche, den
Speicherverbrauch zu minimieren" der Aufgabe, so ziemlich die
schlechtmöglichste ist: Du erzeugst nämlich zwei neue Listen, die in der Summe
so viele Elemente wie die Ursprungsliste haben.
Eine speichersparende Variante muss also wirklich "in-place"
funktionieren, wie meine (die aber wg. der Verwendung von Listen
rausfällt).
Um sicherzustellen, dass man keine Listen-Features benutzt, sollte man
vielleicht wirklich array.array verwenden:
>>> import array
>>> lst = array.array('i', [1,2,3,4,5,6])
>>> lst
array('i', [1, 2, 3, 4, 5, 6])
>>>
Dann muss man sich nämlich was Schlaueres überlegen, z. B. einen Algorithmus
mit Vertauschung der Elemente, aber mir ist da auch noch nix eingefallen.
Im DSE-Wiki hat jemand eine Lösung mit XOR gefunden, aber auf die Schnelle hab
ich noch nicht verstanden, wie die funktioniert.
-- Gerhard
More information about the Python-de
mailing list