Hallo allerseits,
ich weiß es gab schon viele Fragen bezüglich der Stringumwandlung und Auswertung. Dennoch möchte ich dieses Thema in die nächste Runde schicken. Ich möchte gern einen String, der eigentlich eine Formel mit vielen Koeffizienten darstellt verändern. In der ursprünglichen Darstellung sind alle Koeffiezienten durch ein Feld p aus gedrückt:
p = [1,3]
Das kommt als String an:
y = 'p[0] + x*p[1]..'
Diesen String möchte ich nur dahingehend auswerten, dass ich alle 'p' durch die zugehörigen Zahlen ersetze, aber das x einfach stehen lasse:
y = '1 + x*3'
Die einzige Lösung die ich bis jetzt gesehen habe, wäre den String der Reihe nach durchzugehen, die Indizes für 'p' und ']' zu erkennen und dann mithilfe von eval(y[0:4]) Teile des Strings umzuschreiben.
Meine Frage dazu lautet: Geht das nicht vielleicht einfacher, eleganter (aber ohne großen Aufwand)
mfg
p.s:
Die Sicherheit liegt mir dabei nicht am Herzen, und es wird an der Stelle schon eine fehlerfreie Eingabe des Strings vorraus gesetzt.
String teilweise auswerten
-
- User
- Beiträge: 20
- Registriert: Montag 9. Juni 2008, 14:17
- Wohnort: Halle/Saale
Auch wenn Dir Sicherheit nicht am Herzen liegt, würde ich es ohne `eval()` machen:
Code: Alles auswählen
import re
def main():
coefficients = [1, 3]
formula = 'p[0] + x*p[1]'
result = re.sub(r'p\[(\d+)\]',
lambda m: str(coefficients[int(m.group(1))]),
formula)
print result
-
- User
- Beiträge: 20
- Registriert: Montag 9. Juni 2008, 14:17
- Wohnort: Halle/Saale
Danke für die wirklich kompakte und prompte Hilfe. Habs gerade ausprobiert und da hats auch gleich funktioniert
Mein Vorschlag wäre dies:
Stefan
Code: Alles auswählen
p = [1,3]
y = "p[0] + x*p[1]"
f = eval("lambda x:" + y)
for i in range(10): print f(i)