Seite 1 von 1

Wie schreibt man das mit Generator?

Verfasst: Freitag 9. Juni 2017, 12:06
von Alfons Mittelmeyer

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?

Re: Wie schreibt man das mit Generator?

Verfasst: Freitag 9. Juni 2017, 12:17
von Üpsilon
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.

Re: Wie schreibt man das mit Generator?

Verfasst: Freitag 9. Juni 2017, 12:24
von Alfons Mittelmeyer
@Üpsilon: danke.

Ich hatte dann übrigens das gefunden:

Code: Alles auswählen

import re
a = 'aaa   bbb     ccc'
print(re.split('\s+',a))

Re: Wie schreibt man das mit Generator?

Verfasst: Freitag 9. Juni 2017, 12:40
von snafu
Einfach tuple(s.split()) reicht auch.

Re: Wie schreibt man das mit Generator?

Verfasst: Freitag 9. Juni 2017, 14:57
von noisefloor
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

Re: Wie schreibt man das mit Generator?

Verfasst: Freitag 9. Juni 2017, 15:09
von Sirius3
@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))

Re: Wie schreibt man das mit Generator?

Verfasst: Freitag 9. Juni 2017, 19:43
von Alfons Mittelmeyer
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?

Re: Wie schreibt man das mit Generator?

Verfasst: Freitag 9. Juni 2017, 19:50
von Sirius3
@Alfons Mittelmeyer: da gibt es vieles: das offensichtliche `txt.isspace()`, aber auch exotisches wie `bool(txt.strip())` oder `bool(txt.split())`.

Re: Wie schreibt man das mit Generator?

Verfasst: Freitag 9. Juni 2017, 19:56
von Alfons Mittelmeyer
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

Re: Wie schreibt man das mit Generator?

Verfasst: Freitag 9. Juni 2017, 20:03
von noisefloor
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

Re: Wie schreibt man das mit Generator?

Verfasst: Samstag 10. Juni 2017, 16:20
von Alfons Mittelmeyer
@noisefloor: Danke