Seite 1 von 1
Umgekehrtes Prinzip von range()
Verfasst: Samstag 12. Dezember 2015, 21:47
von Magnetonstar
Hallo zusammen,
Ich will einen String (z.B "Hallo") umgekehrt einer Liste hinzufügen (Also liste = ['o', 'l'. 'l', 'a', 'H']).
Links nach rechts würde es ja so aussehen:
Wie soll ich nun das range() modifizieren, dass es bei len(string) anfängt und bis 0 geht?
range(len(string) - 1, 1) funktioniert ja leider nicht.
Re: Umgekehrtes Prinzip von range()
Verfasst: Samstag 12. Dezember 2015, 22:02
von BlackJack
@Magnetonstar: Dafür würde man gar kein `range()` nehmen sondern die `extend()`-Methode von Listen und die `reversed()`-Funktion:
Code: Alles auswählen
In [7]: xs = list()
In [8]: xs.extend(reversed('Hallo'))
In [9]: xs
Out[9]: ['o', 'l', 'l', 'a', 'H']
Re: Umgekehrtes Prinzip von range()
Verfasst: Samstag 12. Dezember 2015, 23:00
von DerSuchende
aber trotzdem sollte man mal sagen, dass range natürlich sehr wohl rückwärts geht!
Re: Umgekehrtes Prinzip von range()
Verfasst: Sonntag 13. Dezember 2015, 00:24
von Sr4l
Und eventuell das man mit Strings auch sowas machen kann:
[codebox=python file=Unbenannt.txt]>>> "Hallo"[0:2]
'Ha'
>>> "Hallo"[2:]
'llo'
>>> "Hallo"[::-1]
'ollaH'
>>>[/code]
Und man braucht nicht unbedingt immer range in Python weil man über viele Dinge iterieren kann:
[codebox=python file=Unbenannt.txt]>>> for x in "Hallo":
... print x
...
H
a
l
l
o
>>>[/code]
Re: Umgekehrtes Prinzip von range()
Verfasst: Sonntag 13. Dezember 2015, 00:39
von BlackJack
@DerSuchende: Wobei ich auch hier `reversed()` empfehlen würde weil man mit den Werten schnell durcheinander kommen kann. Sonst müsste man halt wissen das man von den beiden ersten Werten eins abziehen muss wenn man die positive Richtung in die negative ”drehen” will. Denn ``range(7, 1, -1)`` ist ja nicht das ”Gegenteil” von ``range(1, 7, 1)`` sondern von ``range(2, 8, 1)``. Ich merke mir da lieber wie's mit positivem `step`-Argument funktioniert und benutze `reversed()` wenn ich es anders herum brauche.
Re: Umgekehrtes Prinzip von range()
Verfasst: Sonntag 13. Dezember 2015, 07:42
von DerSuchende
Ich wollte damit ja auch nicht sagen, dass range() für das gestellte Problem geeignet wäre. Es ging mir nur darum Magnetonstar zu widersprechen, wenn er sagt:
"Wie soll ich nun das range() modifizieren, dass es bei len(string) anfängt und bis 0 geht?
range(len(string) - 1, 1) funktioniert ja leider nicht"
Und damit meint, dass es mit range() nicht geht.
Re: Umgekehrtes Prinzip von range()
Verfasst: Sonntag 13. Dezember 2015, 13:19
von Magnetonstar
Danke an alle, werde den Weg [::-1] nehmen, weil es für mich am meisten Sinn macht. Habe das mit extend() noch nicht gehabt und es kommt wahrscheinlich später in meinem Lernverlauf von Python vor.
Re: Umgekehrtes Prinzip von range()
Verfasst: Sonntag 13. Dezember 2015, 18:04
von BlackJack
@Magnetonstar: Irgendetwas „nicht gehabt“ zu haben finde ich ja immer sehr komisch als Begründung es nicht zu verwenden. ``[::-1]`` „hattest“ Du ja scheinbar auch noch nicht, warum kannst Du das dann verwenden? Wenn `extend()` nie vorkommt im weiteren Lernverlauf, wirst Du es dann nie benutzen? Und mit der Erwähnung hier *ist* es in Deinem Lernverlauf doch vorgekommen‽ Das ist eine ganz normale Methode auf Listen. Zum Lernen gehört auch dazu selber zu denken und selbstständig Dokumentation zu lesen und so gewonnene Erkenntnisse zu verwenden. Zumal `extend()` und ``[::-1]`` zudem noch orthogonal sind, denn auch bei ``[::-1]`` auf der Zeichenkette brauchst Du ja immer noch `extend()` um die Buchstaben einer bestehenden Liste hinzuzufügen. Das ``[::-1]`` ersetzt ja nicht das `extend()` sondern das `reversed()`. Vergleiche mal ``characters.extend(text[::-1])`` und ``characters.extend(reversed(text))`` — was ist verständlicher?