0

私は文字列を持っていると言いますtestString = "x=4+y and y = 8"

findIndices(testString)数式項目を含むインデックスのリストを実行して取得したい

つまり、これは戻るはずです[0,1,2,3,4,10,11,12,13,14]

これでうまくいくと思います

find equalSigns
foreach equalSign
   look to the left until you see a space not preceded by an operator
        put current index in  formulalist
   look to the right until you see a space not preceded by an operator
        put current index in formulalist
   put the equalSign index in the formulalist

return formulalist

1)Pythonでより効率的な方法はありますか?それは何ですか?(正規表現?)

2)これが効率的である場合:「左を見る」および「右を見る」サブルーチンを作成するにはどうすればよいですか?

4

2 に答える 2

2

何をしようとしているのかわかりませんが

string.split("=")  
string.index("=")

例えば:

In [1]: a= "y = 25*x  + 42*z"
In [2]: a.split("=")
Out[2]: ['y ', ' 25*x  + 42*z']
In [3]: a.index("=")
Out[3]: 2

あなたに役立つかもしれません。

于 2013-03-04T22:19:09.370 に答える
2

ニブラーのコメントにあるように、構文解析について考える前に文法を書き留めてください。つまり、「数式」が空白を含まず、少なくとも 1 つの等号が含まれる文字列である場合、次の関数は文字列から数式のリストを返します。

def formulas(s):
   return filter(lambda x: '=' in x, s.split())

例:
formulas('x=4+y and y=8')生成['x=4+y', 'y=8']
formulas("x=4+y and y = 8")生成['x=4+y', '='] formulas('x=4+y and y=8 etc z=47+38*x + y')生成['x=4+y', 'y=8', 'z=47+38*x']

もちろん、これらの結果はインデックスのリストではなく、文字列y = 8は数式として扱われませんでした。ただし、全体像としては、より詳細な処理を行う前に、文法を単純化し、元の文字列を個別の式に分割する方が便利な場合があります。

于 2013-03-04T22:41:41.563 に答える