String in Teile trennen

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
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

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ß
Grüßle.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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
Das Leben ist wie ein Tennisball.
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Danke @ cofi :)

Gruß
Grüßle.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Antworten