Seite 1 von 1

String in Teile trennen

Verfasst: Freitag 16. April 2010, 13:16
von theliquidwave
Hallo...
...es ist ja recht einfach möglich, einen String in mehrere Teile zu trennen, jedoch müsste ich dafür erst einen Zähler initialisieren, xrange benutzen und einige if-Abfragen hinzufügen. Gibt es dafür auch was simples, etwas, das extra dafür ist?

Pseudocode:

Code: Alles auswählen

>>> splitted = split_to_pieces("#FF00AA", start=1, step=2)
>>> splitted
("FF", "00", "AA")
Gruß

Verfasst: Freitag 16. April 2010, 13:29
von EyDu
Hallo.

Für so ein billiges Problem kann man die eine Zeile auch ausschreiben.

Code: Alles auswählen

r, g, b = s[1:3], s[3:5], s[5:7]
Oder in viel unleserlicher:

Code: Alles auswählen

map("".join, zip(s, s[1:])[1::2])
Oder mit einem regulären Ausdruck.

Und fast die "schwere Schleife" vergessen:

Code: Alles auswählen

[s[i:i+2] for i in range(1, 6, 2)]
[s[i:i+2] for i in (1, 3, 5)]
Sebastian

Verfasst: Freitag 16. April 2010, 13:44
von cofi

Verfasst: Freitag 16. April 2010, 17:55
von theliquidwave
Danke @ cofi :)

Gruß

Verfasst: Samstag 17. April 2010, 12:57
von sma
Und es gibt natürlich immer auch eine Lösung mit regulären Ausdrücken:

Code: Alles auswählen

import re

def rgb(s):
    return re.match("#(..)(..)(..)", s).groups()

(r, g, b) = rgb("#ff8833")
print(r, g, b)

def rgb(s):
    return [int(c, 16) for c in re.match("#(..)(..)(..)", s).groups()]

(r, g, b) = rgb("#ff8833")
print(r, g, b)

def rgb(s):
    return re.match("#(?P<r>..)(?P<g>..)(?P<b>..)", s).groupdict()

print(rgb("#ff8833"))
Stefan