Seite 1 von 1
Substring mit Pattern
Verfasst: Samstag 12. März 2011, 13:25
von rhersel
Folgendes einfache Problem: ich habe einen String, z.B.: "ABCDEFGHIJKLMNOP". Aus diesem String brauche ich bestimmte Teile, die durch einen Positionsstring beschrieben sind, z.B.: "4568", ich möchte demnach die 4., 5., 6. und 8. Position in einem neuen String haben, z.B.: "DEFH".
Jetzt mache ich das so, also ziemlich unelegant:
Code: Alles auswählen
string = "ABCDEFGHIJKLMNOP"
pattern = "4568"
result = ''.join([string[int(p)-1] for p in pattern])
print result
Gibt es ein Slicing oder sonst eine Funktion mit der das eleganter geht?
Re: Substring mit Pattern
Verfasst: Samstag 12. März 2011, 13:39
von deets
Nein - und ich finde eine Zeile schon recht gut
Ist dir das Pattern so vorgegeben? Ich halte es fuer unzulaenglich - was passiert, wenn du Strings mit Laenge > 10 hast?
Ich wuerde es daher als simples Tupel von Zahlen machen. Wenn du ein bisschen optimieren magst, dann kannst du konsekutive Sequenzen als slices darstellen.
Code: Alles auswählen
s = "ABCDEFGHIJKLMNOPQRSTUVW"
patterns = [
(3, 4, 5),
(1, slice(4,7), 10),
]
for p in patterns:
print "".join(s[part] for part in p)
Re: Substring mit Pattern
Verfasst: Samstag 12. März 2011, 14:32
von rhersel
Der String ist bezüglich Länge (< 10) und erlaubtem Inhalt fest vorgegeben.
Das Pattern muss DAU-lesbar sein. Somit ist "789" das höchste der Gefühle. Das zugehörige "slice(6,8)" ist zu kompliziert für den Endanwender; ausserdem ist darin der -1 Versatz enthalten weil der String-Index bei 0 anstatt bei 1 anfängt. Daher müsste ich "789" zuerst in slice(6,8) übersetzen was dann wieder viel mehr Code ergibt.
Trotzdem vielen Dank für den Vorschlag; die Methode slice() war mir nämlich neu.
Re: Substring mit Pattern
Verfasst: Samstag 12. März 2011, 15:20
von Hyperion
Kleine Anmerkung noch:
Du solltest den Namen "string" vermeiden, da Du damit ein Modul der Standardlib überschreibst.