String zerschneiden + Umkehren

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
eunan
User
Beiträge: 2
Registriert: Dienstag 14. Dezember 2010, 15:32

Ich habe ein Python Programm, das mir einen String mit mehreren Elementen liefert, die durch ein Leerzeichen getrennt sind, jetzt soll ein 2. String geschaffen werden, der die Elemente des ersten Strings in umgekehrter Reihenvfolge enthält. Mein Problem ist, das mein Ansatz zwar die Elemente des Strings richtig umsortiert, allerdings nur das erste Element richtig läst und bei den anderen die einzelnen Zeichen vertauscht.

Code: Alles auswählen

 while len(str1)>0:
        str1.rstrip()
        str2= str2+ str2l[str1.rfind(" "):].lstrip()+" "
        
        str1 = str1[:str1.rfind(" ")]
    
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Was wird das ? :)

Splitte den String mit der ".split(...)"-Methode für strings, damit du eine Liste erhältst, diese kannst du dann bearbeiten.
Und dann musst du nur noch die List wieder zu einem String machen in dem du die ".join(...)"-Methode für Listen nutzt.

Achja und poste mal ein Beispiel Text voher und nacher (also wie er aussehen soll), dann wirst du sicherlich sogar einige Musterlösungen bekommen.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
eunan
User
Beiträge: 2
Registriert: Dienstag 14. Dezember 2010, 15:32

Beispieltext:

vorher
"ab cd"

nachher
"cd ab"
nur leider macht meins daraus
"cd ba"
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also sollt Ihr einen String in Wörter zerlegen (durch Leerzeichen getrennt) und die Reihenfolge der Wörter umdrehen. Naja, die Werkzeuge zum Lösen hat Xynon1 Dir ja schon genannt. Fehlt Dir nur noch ein Weg, eine Liste umzudrehen ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Also hier mal eine schlichte Lösung (dringend die Variablen Bezeichnungen ändern, ich steh heute, was das angeht ziemlich auf dem Schlauch)

Code: Alles auswählen

def cutting_string_and_reverse(string):
    words = string.split(" ")
    words.reverse()
    
    reversed_words = [words[0], ]
    for word in words[1:]:
        reversed_word = list(word)
        reversed_word.reverse()
        reversed_words.append("".join(reversed_word))
        
    return " ".join(reversed_words)

if __name__ == "__main__":
    print(cutting_string_and_reverse("ab cd"))  
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Xynon1 hat geschrieben:Also hier mal eine schlichte Lösung
schlicht :shock:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
lunar

@Xynon1: Ist Dir eigentlich klar, was Deine „Lösung“ erzeugt? Das entspricht nämlich eigentlich nicht der Aufgabenstellung. Diese, die Reihenfolge der Wörter in einer Zeichenkette umzukehren nämlich, ist ein Einzeiler.
Benutzeravatar
Klip
User
Beiträge: 98
Registriert: Donnerstag 10. August 2006, 20:39

Code: Alles auswählen

>>> s = "Hello my little string"
>>> " ".join(s.split()[::-1])
'string little my Hello'
Hmm, geht wahrscheinlich noch wesentlich eleganter.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Klip hat geschrieben: Hmm, geht wahrscheinlich noch wesentlich eleganter.
Also das hätte ich jetzt im Kopf gehabt - aber so lernt der OP nicht so viel ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
lunar

@Klip: Wie schön, da ist die erste Musterlösung, von der Xynon1 sprach ... wenigstens hast Du auf Erklärungen verzichtet, damit der OP zumindest ein bisschen nachdenken muss.

Nun, da er OP bereits einen Spoiler hat, kann ich ja auch sagen, dass ich es eher so geschrieben hätte:

Code: Alles auswählen

' '.join(reversed(s.split()))
Ich finde diese Variante ist besser zu lesen als die doch recht „magische“ negative Schrittweite, was aber auch daran liegen mag, dass ich in gewisser Weise „funktional“ geprägt bin. Zudem kommt sie ohne die an sich überflüssige Liste aus, die in Deinem Beispiel als Ergebnis des Slicings entsteht.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

:oops:, ich habe
eunan hat geschrieben: nachher
"cd ab"
nur leider macht meins daraus
"cd ba"
vertauscht, ich dachte er wollte "cd ba"

Bevor ich das gelesen habe meinte ich wie lunar es oben geschrieben hat, nur an reversed hatte ich nicht gedacht.
Asche über mein Haupt.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten