Seite 1 von 1
[Frage?!?] Inhalt einer Variabele rückwärts speichern
Verfasst: Sonntag 3. Mai 2009, 17:26
von TB-Python
Hallo Leute
Ich habe folgendes Problem....
ich habe z.b eine Variabele
test=hallo
der inhalt der variabele möchte ich rückwärts geschreiben in eine andere speichern, dass das Endergebnis dann so aussehen würde...
neu_test=ollah
Ich weiß schon das ich hier mit einer FOR-Schleife arbeiten muss aber ich habe zur zeit kein Plan wie ich diesen Sachverhalt umsetzten soll
Danke schon mal im voraus ^^
Verfasst: Sonntag 3. Mai 2009, 17:36
von lunar
Verfasst: Sonntag 3. Mai 2009, 17:39
von Rebecca
Dafuer braucht man noch keine Schleife, das kann Python schon so:
Code: Alles auswählen
>>> test1 = "hallo"
>>> test2 = test1[::-1]
>>> print test2
ollah
Was du umdrehen willst, ist uebrigens ein String und gehoert in Anfuehrungszeichen.
Verfasst: Sonntag 3. Mai 2009, 18:37
von TB-Python
jo danke ^^ funktioniert
ja ich weiß hab ich gerade nur vergessen rein zumachen
Verfasst: Sonntag 3. Mai 2009, 18:40
von sma
Mit einer for-Schleife geht es natürlich auch. Unter der Annahme das in der Schule/im Unterricht noch keine Generatoren oder Slices dran waren, könnte man auch einfach von hinten beginnend auf den String zugreifen. Man muss nur wissen, dass die einzelnen Zeichen mit einem Index von 0 bis Länge-1 adressiert werden und dass negative Index-Werte zur Länge addiert von hinten zählen. Ist 0 das erste Element und 1 das zweite, so ist Länge-1 (oder eben nur -1) das letzte und -2 das vorletzte.
Mit "range(Länge)" erzeugt man sich Zahlen zwischen 0 und Länge-1. Über so ein range-Objekt kann man dann mit einer for-Schleife iterieren.
Stefan
Verfasst: Montag 4. Mai 2009, 12:41
von snafu
Slicing ist offenbar eine ganze Ecke schneller als `reversed()` + `join()`:
Code: Alles auswählen
In [15]: t = timeit.Timer('"bla"[::-1]')
In [16]: t.timeit()
Out[16]: 0.55775189399719238
In [17]: t = timeit.Timer('"".join(reversed("bla"))')
In [18]: t.timeit()
Out[18]: 5.1222031116485596
Verfasst: Montag 4. Mai 2009, 13:13
von cofi
Kann ich bestätigen. Mal ausführlicher:
Code: Alles auswählen
In [3]: t = timeit.Timer('"bla"[::-1]')
In [4]: t.timeit()
Out[4]: 0.23100900650024414
In [5]: t = timeit.Timer('"".join(reversed("bla"))')
In [6]: t.timeit()
Out[6]: 2.0036501884460449
In [7]: t = timeit.Timer('str(reversed("bla"))')
In [8]: t.timeit()
Out[8]: 1.6974201202392578
In [9]: t = timeit.Timer('unicode(reversed("bla"))')
In [10]: t.timeit()
Out[10]: 2.0045149326324463
Verfasst: Dienstag 5. Mai 2009, 13:16
von bords0
Hast du mal ausprobiert, was du da misst? Wenn ja, wozu willst du wissen, wie schnell das ist?
Verfasst: Dienstag 5. Mai 2009, 14:03
von cofi
Was ich da messe? Wie schnell aus einem reversed-Iterator ein String-Objekt gebaut wird.
Warum? Um snafus Werte zu komplettieren und ich gerade Lust dazu hatte zu sehen wie sich die üblichen String-Erzeuger verhalten.
Verfasst: Dienstag 5. Mai 2009, 14:12
von EyDu
cofi hat geschrieben:Was ich da messe? Wie schnell aus einem reversed-Iterator ein String-Objekt gebaut wird.
Code: Alles auswählen
>>> str(reversed("test"))
'<reversed object at 0x7f71bba24650>'
Verfasst: Dienstag 5. Mai 2009, 14:40
von Leonidas
Uii, na dass sollte recht effizient sein, O(1), constant time!
Wer mag mir erklaeren was "[Frage ?!?]" im Topic fuer einen Sinn hat? Will man markieren dass es eine Frage ist? Das waere ja nicht weiter erwaehnenswert. Ist der OP sich nicht sicher ob es eine Frage ist?
Verfasst: Dienstag 5. Mai 2009, 16:24
von lunar
snafu hat geschrieben:Slicing ist offenbar eine ganze Ecke schneller als `reversed()` + `join()`
Ich habe meine Lösung auch nur gepostet, weil ich an Slicing nicht gedacht habe.