Wie schreibt man das mit Generator?

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
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Code: Alles auswählen

a = 'aaa   bbb     ccc'
b = a.split(' ')
c = []
for i in b:
    if i:
        c.append(i)
d = tuple(c)
print(d)
Das scheint mir ein wenig umständlich zu sein, oder?
Üpsilon
User
Beiträge: 222
Registriert: Samstag 15. September 2012, 19:23

Ohne Gewähr:
d = tuple(i for i in a.split() if i)
Übrigens: wenn man bei split nix übergibt, trennt es an allen Whitespace.
PS: Die angebotene Summe ist beachtlich.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@Üpsilon: danke.

Ich hatte dann übrigens das gefunden:

Code: Alles auswählen

import re
a = 'aaa   bbb     ccc'
print(re.split('\s+',a))
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Einfach tuple(s.split()) reicht auch.
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

[codebox=pycon file=Unbenannt.txt]>>> a = 'aaa bbb ccc'
>>> tuple(x for x in a if x!=' ')
('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c')
>>>
[/code]

Setzt aber voraus, dass zwischen den Buchstaben tatsächlich nur Leerzeichen sind (und keine Tabs etc.)

Gruß, noisefloor
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@noisefloor: die einzelnen Wörter sollen schon noch zusammenbleiben. Dein Problem läßt sich mit isspace lösen:

Code: Alles auswählen

from itertools import filterfalse
text = "aaa   bbb\tccc"
tuple(filterfalse(str.isspace, text))
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

snafu hat geschrieben:Einfach tuple(s.split()) reicht auch.
Danke, funktioniert prima:

Code: Alles auswählen

if 'minsize' in kwargs:
    minsize = kwargs.pop('minsize')
    if isinstance(minsize,str):
        minsize = minsize.split()
    self.minsize(*minsize)
Jetzt möchte ich aber noch etwas anderes wissen. Ich habe einen String, da könnten nur white spaces drin sein und ich möchte wissen, ob der String nur white spaces enthält.

Da doch re. nehmen, oder braucht man das da auch nicht?
Zuletzt geändert von Alfons Mittelmeyer am Freitag 9. Juni 2017, 19:52, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@Alfons Mittelmeyer: da gibt es vieles: das offensichtliche `txt.isspace()`, aber auch exotisches wie `bool(txt.strip())` oder `bool(txt.split())`.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Sirius3 hat geschrieben:@Alfons Mittelmeyer: da gibt es vieles: das offensichtliche `txt.isspace()`, aber auch exotisches wie `bool(txt.strip())` oder `bool(txt.split())`.
Danke Sirius3, txt.isspace() klingt gut, habe ich hier aber nicht gefunden: https://docs.python.org/2/library/string.html
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du guckst auch falsch. Das ist bei den Methoden von Strings dokumentiert (https://docs.python.org/2/library/stdty ... ng-methods) - du hast den String Operations geschaut.

Gruß, noisefloor
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@noisefloor: Danke
Antworten