String Leerstellen entfernen und in array umwandeln

Gast #6851045
Lesenswert?

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
Gast #6851111
Lesenswert?

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.
Moderator #6851125
Lesenswert?

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.
Gast #6851233
Lesenswert?

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.
Gast #6851241
Lesenswert?

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
Gast #6851260
Lesenswert?

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.
#6851290
Lesenswert?

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.

:-(
Moderator #6851295
Lesenswert?

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 :)
Gast #6851298
Lesenswert?

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.
Gast #6851358
Lesenswert?

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.
Moderator #6851401
Lesenswert?

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.
Angehängte Dateien:
Gast #6851415
Lesenswert?

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.
Gast #6851425
Lesenswert?

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.
(Firma: Privat) #6851493
Lesenswert?

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
Moderator #6851524
Lesenswert?

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.
(Firma: Privat) #6851559
Lesenswert?

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.
Gast #6851961
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren