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.