在Python中从字符串中提取系数的好方法是什么?

时间:2013-07-07 02:40:15

标签: python symbolic-math

我正试图找到一种方法来有效地从包含符号多项式的字符串中提取系数,并将它们放入列表中,其中幂是indeces。例如,一个字符串

x^10+6x^4-5x^2+x-11

将是列表

[-11, 1, -5, 0, 6, 0, 0, 0, 0, 0, 1]

我目前正在努力学习正则表达式来处理它,但我对它的理解并不足以激发人们对其稳健性的信心(显然,逻辑告诉我其他情况)。任何人都可以让我走上正确的轨道来解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

模式 r'-?\d*x\^\d+|-?\d+x?|-?x'应该拆分字符串。

例如:

import re

string = "x^10+6x^4-5x^2+x-11"

pattern = re.compile(r'-?\d*x\^\d+|-?\d+x?|-?x')
matches = pattern.findall(string)
# matches == ['x^10', '6x^4', '-5x^2', 'x', '-11']

剩下的应该是可行的。我将它作为练习留给读者。

答案 1 :(得分:3)

这是一种将方程式解析为具有自记录密钥的字典列表的方法。这种方法在精神上与Jmac的非常好的答案类似。

eq = 'x^10+6x^4-5x^2+x-11'

patt = r'(?P<sign>[-+]?)(?P<coeff>\d*)(?P<x>x?)(?:\^(?P<exp>\d+))?'
rgx = re.compile(patt)

eq_parts = [m.groupdict() for m in rgx.finditer(eq)][0:-1]

for eqp in eq_parts:
    print eqp

输出:

{'x': 'x', 'coeff': '', 'exp': '10', 'sign': ''}
{'x': 'x', 'coeff': '6', 'exp': '4', 'sign': '+'}
{'x': 'x', 'coeff': '5', 'exp': '2', 'sign': '-'}
{'x': 'x', 'coeff': '', 'exp': None, 'sign': '+'}
{'x': '', 'coeff': '11', 'exp': None, 'sign': '-'}