Hi, hätte eine Frage: ich habe einen string: string = "Monitor Computer handy" In diesem string sind unterschiedlich viele leerstellen zwischen den elementen. Ich hatte jetzt probiert dies mit dem replace zu trennen. string_ohneleer = string.replace(" ", "") Jetzt möchte ich allerdings den string in eine liste umwandeln. Hier hatte ich leider noch keine Lösung gefunden, da der replace alle elemente direkt hintereinander geschrieben hat. Kann mir hier jemand weiterhelfen? Dane für die Hilfe :D
Leon schrieb: > string_ohneleer = string.replace(" ", "") Hat (vermutlich) zur Folge, daß der Ergebnisstring gar keine Leerzeichen mehr enthält. Das ist vermutlich nicht das, was du möchtest. Leon schrieb: > Jetzt möchte ich allerdings den string in eine liste umwandeln. Da gibt es vermutlich auch ein string.split Oliver
Leon schrieb: > Jetzt möchte ich allerdings den string in eine liste umwandeln. in welcher Programmiersprache? falls es Python ist
1 | string_list = string.split() |
auch bei anderen Sprachen ist eher Split das was du suchen wirst.
Danke für die Antworten. Ja, ich meinte Python. leider konnte ich als gast nur einmal Pro Stunde schreiben. Habe jetzt auch selbst schon herausgefunden, das es mit .split() funktioniert. auch wenn ich nicht weiß warum. weil theoretisch sollte es ja auch an Leerstellen spliten.
Leon schrieb: > auch wenn ich nicht weiß warum. Darum:
1 | >>> help(str.split) |
2 | Help on method_descriptor: |
3 | |
4 | split(self, /, sep=None, maxsplit=-1) |
5 | Return a list of the words in the string, using sep as the delimiter string. |
6 | |
7 | sep |
8 | The delimiter according which to split the string. |
9 | None (the default value) means split according to any whitespace, |
10 | and discard empty strings from the result. |
11 | maxsplit |
12 | Maximum number of splits to do. |
13 | -1 (the default value) means no limit. |
Leon schrieb: > string_ohneleer = string.replace(" ", "") Hättest nur das Komma als Ersatzzeichen verwenden müssen. Obwohl ich jetzt Python nicht kann. string_ohneleer = string.replace(" ", ",")
Heinz B. schrieb: > Hättest nur das Komma als Ersatzzeichen verwenden müssen. > Obwohl ich jetzt Python nicht kann. Dann wäre jedes Leerzeichen durch ein Komma ersetzt worden. Bringt also gar nichts: print(string.replace(" ", ",")) Monitor,,,,,,Computer,,,handy print(Monitor Computer handy".split()) ['Monitor', 'Computer', 'handy'] Wohlgemerkt ohne explizite Angabe eines Delimiters.
print(string.replace(" ", " ")) print(string.replace(" ", ","))
string_ohneleer = string.replace(" ", "") <- entfernt ALLE Leerzeichen string_ohneleer = string.replace(" ", " ") <- Lässt eins zwischen den Wörtern stehen. string_ohneleer = string.replace("2_leerzeichen", "1 Leerzeichen") <- Nur zu Erklärung da man die Leerzeichen nicht sehen kann. Es ist aber dann erforderlich ein TRIM-Befehl zu machen um ALLE Leerzeichen am Anfang und Ende es kompletten String zu entfernen. Ich vermute als Programmiersprache VB o. VC
Schlaumaier schrieb: > Ich vermute als Programmiersprache VB o. VC Von einem "Schlaumaier" würde ich erwarten dass er einfach die vorigen Postings liest! Leon schrieb: > Ja, ich meinte Python.
Udo S. schrieb: > Von einem "Schlaumaier" würde ich erwarten dass er einfach die vorigen > Postings liest! Falsche Erwartung. Ich lese nicht die üblichen Dummen Sprüche hier. Ich lese den Post des TO und gebe darauf meine Antwort. Davon abgesehen ist meine Antwort eine logische und von der Programmiersprache unabhängig. Ergo auch für Python geeignet.
Schlaumaier schrieb: > Ich lese nicht die üblichen Dummen Sprüche hier. Nur das es kein dummer Spruch sondern eine zusätzliche Angabe des TOOs war. Mehr als 2 Stunden vor deinem Post Schlaumaier schrieb: > Ich lese den Post des TO und gebe darauf meine Antwort. Leider eine die völlig am Thema vorbei ist denn du hast nur die Hälfte des ersten Posts gelesen: Leon schrieb: > Jetzt möchte ich allerdings den string in eine liste umwandeln. Schlaumaier schrieb: > Falsche Erwartung. Bei solchen Posts erwartet man nicht mehr viel. :-(
Schlaumaier schrieb: > string_ohneleer = string.replace(" ", " ") <- Lässt eins zwischen den > Wörtern stehen. Nein, das macht aus n Leerzeichen ⌊(n+1)/2⌋. Und das Wesentliche fehlt: Leon schrieb: > Jetzt möchte ich allerdings den string in eine liste umwandeln. Schlaumaier schrieb: > Ich lese nicht die üblichen Dummen Sprüche hier. Musst du auch nicht. Ich sehe in diesem Thread aber kaum einen dummen Spruch. > Ich lese den Post des TO Davon gibt es aber zwei. Zumindest diese hättest du lesen können. Edit: Udo war schneller :)
:
Bearbeitet durch Moderator
Leon schrieb:
> Jetzt möchte ich allerdings den string in eine liste umwandeln.
In VB wäre das nicht wirklich ein Problem für mich. Aber in Python weiß
ich nicht ob es dafür eine Funktion gibt.
In VB würde ich es mit einer Schleife machen und dabei die Funktionen
MID + INSTR benutzen. Weil ich es andere Funktion auch in VB nicht
kenne.
Genauer gesagt würde ich *my_funktion.string_in_array(text$,liste())*
aufrufen, da ich diese Funktion mal geschrieben habe.
Also habe ich diese Teil der Frage zwar gelesen aber nicht beantwortet,
da ich mir meiner Lösung nicht sicher war. Und kein Interesse daran
hatte, das ich wegen einer 10-20 Zeilen VB - Lösung wieder von euch
beschimpft werde.
Zur ersten Aufgabe: ich lasse gelegentlich im Hexeditor alle "20 20" durch "20" ersetzen, so oft bis keine mehr gefunden werden. Dann hat man nur noch einzelne Leerzeichen.
STK500-Besitzer schrieb: > Dann wäre jedes Leerzeichen durch ein Komma ersetzt worden. Ja, hast Recht. Das habe ich nicht bedacht. Vielleicht auch mit einem regulären Ausdruck suchen und ersetzen, falls das in Python möglich ist. Etwa so : string.replace(" {1,}", ",") Reguläre Ausdrücke bieten sich förmlich dafür an.
:
Bearbeitet durch User
STK500-Besitzer schrieb:
> Dann wäre jedes Leerzeichen durch ein Komma ersetzt worden.
Die sicherste (und von Excel anerkannte Methode) ist, als Trennzeichen
ein CHR(9) = TAB einzusetzen, zur Trennung der Felder.
Da dieses Zeichen im normalen Text nicht vorkommt, ein Komma aber schon.
Ich habe Kommas sogar schon in Adressen gesehen.
Schlaumaier schrieb: > Die sicherste (und von Excel anerkannte Methode) nennt sich csv. Dreimal darfst du raten, warum. Oliver
Schlaumaier schrieb: > In VB würde ich es mit einer Schleife machen und dabei die Funktionen > MID + INSTR benutzen. Weil ich es andere Funktion auch in VB nicht > kenne. > > Genauer gesagt würde ich *my_funktion.string_in_array(text$,liste())* > aufrufen, da ich diese Funktion mal geschrieben habe. Warum so unendlich kompliziert, wenn es in Python (das der TE verwenden will) mit einem einzigen Funktionsuafruf geht? Schlaumaier schrieb: > Die sicherste (und von Excel anerkannte Methode) ist, als Trennzeichen > ein CHR(9) = TAB einzusetzen, zur Trennung der Felder. Der String des TE enthält nun aber nun mal Leerzeichen zwischen den Wörtern und das in einer variablen Anzahl. Ganz abgesehen davon kommt split() auch mit Tabs, Newlines und allen anderen Whitspace-Zeichen zurecht.
Oliver S. schrieb: > nennt sich csv. Dreimal darfst du raten, warum. k.a. Aber ich kenne CSV mit komma, Komma + Anführungszeichen, TAB, Sonderzeichen und in allen Kombis davon. Einfach gesagt, es gibt keine Norm. Nicht einmal CSV ist genormt, weil die Prg. auch SDF + TXT Dateien so behandeln. Und selbst wenn ich die CSV nenne stellen die meisten Programme sich nicht gleich ein.
Yalu X. schrieb: > Warum so unendlich kompliziert, wenn es in Python (das der TE verwenden > will) mit einem einzigen Funktionsuafruf geht? Wie bereits weiter oben erwähnt (andere Leute lesen auch nicht alles) habe ich extra mich zu den Thema nicht geäußert weil ich keine Listen-Funktionen kenne in VB. Und bei Python sowieso nicht.
Oliver S. schrieb: > nennt sich csv. Dreimal darfst du raten, warum. Character Seperated Values. Und Excel arbeitet am Besten mit Tabulatoren.
:
Bearbeitet durch User
Sagt mal, ihr Python - Experten, ist das denn wirklich so schwierig ? Weil ich es jetzt wissen wollte, habe ich mir mal das Python 3.9 installiert. Nach zehn Minuten googeln hatte ich schon Erfolg. Da war das Googeln mehr wegen der Syntax angesagt.
1 | >>> import re |
2 | >>> s = "Monitor Computer handy" |
3 | >>> obj = re.sub(r' +', ",", s) |
4 | >>> print(obj) |
Monitor,Computer,handy
:
Bearbeitet durch User
Heinz B. schrieb: > Sagt mal, ihr Python - Experten, ist das denn wirklich so > schwierig ? Nein, wurde ja bereits gelöst. > Monitor,Computer,handy Das ist keine Liste, sondern ein String.
Heinz B. schrieb: > obj = re.sub(r' +', ",", s) oder
1 | obj = ','.join(s.split()) |
je nachdem, ob man bei
1 | s = " Monitor Computer handy " |
lieber ",Monitor,Computer,handyi," oder "Monitor,Computer,handy" als Ergebnis erhalten möchte. Das alles ist aber etwas offtopic, da der TE ja eine Liste möchte, und dafür hat er die einfachste Lösung ja schon selbst gefunden.
Dirk B. schrieb: > Das ist keine Liste, sondern ein String. Wenn er das dann schon nicht hin bekommt, soll er am besten mit Python und überhaupt mit irgendwelchen Programmier - oder Scriptspachen gar erst nicht anfangen. Einen String in eine Liste oder Array zu splitten, ist ja wohl erstes Schuljahr. Man muß schon etwas Eigeninitiative zeigen. Das ist doch das schöne am Programmieren, wenn man einen sogen. AHA-Effekt hat. Das macht doch den Reiz zum Programmieren erst aus. Den Effekt hatte ich damals (und auch heute noch) sichtlich genossen. Gerade, so etwas Banales selber lösen zu können, spornt doch auch zum Weitermachen bzw. Reinwachsen an.
Heinz B. schrieb: > Wenn er das dann schon nicht hin bekommt, soll er am > besten mit Python und überhaupt mit irgendwelchen Programmier > - oder Scriptspachen gar erst nicht anfangen. Einen String > in eine Liste oder Array zu splitten, ist ja wohl erstes > Schuljahr. Da sollte sich jemand mal an die eigene Nase fassen. Gefordert war eine List, kein csv-String. Das Problem wurde mit dem ersten Post mit ".split()" schön gelöst. Man kann es natürlich auch zu Fuß (in Assemlber) erledigen. In PHP würde man "explode()" verwenden. > Man muß schon etwas Eigeninitiative zeigen. Das ist doch das > schöne am Programmieren, wenn man einen sogen. AHA-Effekt hat. > Das macht doch den Reiz zum Programmieren erst aus. Den Effekt > hatte ich damals (und auch heute noch) sichtlich genossen. Gerade, > so etwas Banales selber lösen zu können, spornt doch auch zum > Weitermachen bzw. Reinwachsen an. Seine Eigeninitiative war, jemand anders zu fragen. Das halte ich für legetim, wenn man "den Wald vor lauter Bäumen nicht sieht". Woher soll ein Anfänger den Begriff "regulärer Ausdruck" kennen? Das ist ja noch abstrakter als eine Schleife und ein paar If-Abfragen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.