Seite 1 von 1
String zerschneiden + Umkehren
Verfasst: Dienstag 14. Dezember 2010, 15:38
von eunan
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(" ")]
Re: String zerschneiden + Umkehren
Verfasst: Dienstag 14. Dezember 2010, 15:44
von Xynon1
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.
Re: String zerschneiden + Umkehren
Verfasst: Dienstag 14. Dezember 2010, 16:59
von eunan
Beispieltext:
vorher
"ab cd"
nachher
"cd ab"
nur leider macht meins daraus
"cd ba"
Re: String zerschneiden + Umkehren
Verfasst: Dienstag 14. Dezember 2010, 17:14
von Hyperion
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

Re: String zerschneiden + Umkehren
Verfasst: Dienstag 14. Dezember 2010, 17:19
von Xynon1
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"))
Re: String zerschneiden + Umkehren
Verfasst: Dienstag 14. Dezember 2010, 17:43
von Hyperion
Xynon1 hat geschrieben:Also hier mal eine schlichte Lösung
schlicht

Re: String zerschneiden + Umkehren
Verfasst: Dienstag 14. Dezember 2010, 17:50
von 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.
Re: String zerschneiden + Umkehren
Verfasst: Dienstag 14. Dezember 2010, 17:52
von Klip
Code: Alles auswählen
>>> s = "Hello my little string"
>>> " ".join(s.split()[::-1])
'string little my Hello'
Hmm, geht wahrscheinlich noch wesentlich eleganter.
Re: String zerschneiden + Umkehren
Verfasst: Dienstag 14. Dezember 2010, 17:59
von Hyperion
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

Re: String zerschneiden + Umkehren
Verfasst: Dienstag 14. Dezember 2010, 18:03
von 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:
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.
Re: String zerschneiden + Umkehren
Verfasst: Dienstag 14. Dezember 2010, 22:50
von Xynon1

, 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.