Umgekehrtes Prinzip von range()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Magnetonstar
User
Beiträge: 14
Registriert: Montag 16. November 2015, 18:46

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:

Code: Alles auswählen

for x in range(len(string)):
    list.append(string[x])
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.
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']
DerSuchende
User
Beiträge: 29
Registriert: Montag 21. Februar 2011, 07:37

aber trotzdem sollte man mal sagen, dass range natürlich sehr wohl rückwärts geht!

Code: Alles auswählen

print range(7, 1, -1)
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

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]
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.
DerSuchende
User
Beiträge: 29
Registriert: Montag 21. Februar 2011, 07:37

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.
Magnetonstar
User
Beiträge: 14
Registriert: Montag 16. November 2015, 18:46

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.
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?
Antworten