2

シンボリック多項式を含む文字列から係数を効率的に引き出し、べき乗が指数であるリストに入れる方法を見つけようとしています。たとえば、文字列

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

リストになります

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

私は現在、それを処理するために正規表現を学ぼうとしていますが、私の理解は、その堅牢性に自信を持たせるのに十分ではありません (明らかに、論理はそうではないと教えてくれます)。誰かがこの問題を解決するための正しい軌道に乗せることができますか?

4

2 に答える 2

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']

残りは実行可能でなければなりません。読者の演習として残しておきます。

于 2013-07-07T03:15:49.067 に答える
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': '-'}
于 2013-07-07T03:36:48.443 に答える