Code: Alles auswählen
>>> "".join(["gnirtS"[i-1] for i in range(len("gnirtS"), 0, -1)])
'String'
Code: Alles auswählen
>>> "".join(["gnirtS"[i-1] for i in range(len("gnirtS"), 0, -1)])
'String'
Code: Alles auswählen
In [7]: "gnirtS"[::-1]
Out[7]: 'String'
Code: Alles auswählen
def rec_reverse(string, acc=''):
if not string:
return acc
return rec_reverse(string[1:], string[0] + acc)
print rec_reverse('gnirtS')
print rec_reverse('uhuH')
Die Endrekursion könnte man zur Iteration optimieren, da muss man einfach nur einen passenden Dekorator drauf setzen wenn dass nicht mehr ausreicht.lunar hat geschrieben:Aber nur, wenn die Strings nicht zu lang werden
Funktionen wie iter oder das seit 2.6 neue next haben durchaus (zur Generalisierung, da jeder Iterator eine next Methode haben muss und man dann besser eine allgemein bekannte Funktion als eine next Methode bemüht) ihre Berechtigung, aber sorted und reversed sind schon arg speziell. Reversed ruft entweder eine __reversed__ Methode des Objektes auf oder sortiert mithilfe von __getitem__ von 0 an. Insofern ist ein Objekt gezwungen, sich entweder "Listen-ähnlich" zu verhalten oder eine __reversed__ Methode zu implementieren (wo man auch einfach die 4 Unterstriche weglassen könnte). Zusätzlich haben Listen sogar noch eine In Place reverse Methode. Sorted dagegen scheint immer eine Liste zurückzugeben und ist anscheinend äquivalent zuAlso ich sehe `reversed` wie `iter` oder `sorted`. Macht als generische Funktion mehr Sinn, als wenn das jeder als `reversed()`-Methode auf seinen Sequenzen definieren müsste.
Code: Alles auswählen
a = list(sequence)
a.sort()
Natürlich war das nicht *vollkommen* ernst gemeint,DasIch hat geschrieben: Das ganze ist natürlich hier trotzdem keine sinnvolle Lösung...
Es ist nicht schön, eine Rekursion zu bauen, wenn die Sprache das auch ohne kann.yipyip hat geschrieben:1. finde ich sowas schön (auch in Python)
Diese Funktionen machen doch alle nicht viel. iter(obj) ruft entweder obj.__iter__ auf oder benutzt auch das "Listen-ähnliche" __getitem__ Verhalten, len(obj) ruft auch nur obj.__len__() auf... Es sind alles Funktionen, die erfordern, das ein Objekt eine bestimmte "magic" (doppelt Unterstrich) Methode implementiert oder sich in einer bestimmten Art und Weise verhält. len, iter, next sind aber sehr allgemein gehaltene Funktionalitäten. next(obj) macht sogar gar nichts anderes als nur obj.next() aufzurufen. Ein Iterator muss aber zwingend eine next() Methode haben, um zb in einer For Schleife verwendet werden zu können.Naja, mit der gleichen Argumentation könnte man "next()" auch anzweifeln, verlangt es doch, dass sich das übergebene Objekt wie ein Iterator verhält ...
Manche Dinge lassen sich mit Rekursion imho deutlich "natürlicher" / intuitiver lösen als mit Iteration.Es ist nicht schön, eine Rekursion zu bauen, wenn die Sprache das auch ohne kann.
Jo, das bezweifele ich nicht. Ich gebe zu, ich habe auch etwas an meiner eigentlichen Aussage vorbeiformuliertstr1442 hat geschrieben:Manche Dinge lassen sich mit Rekursion imho deutlich "natürlicher" / intuitiver lösen als mit Iteration.Es ist nicht schön, eine Rekursion zu bauen, wenn die Sprache das auch ohne kann.