単純な数式を含む 50,000 行の文字列があるとします (+,- 演算子のみ、たとえば 1+2+3+5 を含みます)。これらの文字列を評価するには、Python で eval() を使用すると便利です。ただし、プログラムは十分に効率的ではありません。cProfile を実行したところ、ボトルネックのほとんどが eval 関数によるものであることがわかりました (50,000 行の場合で約 2.5 秒)。私は独自の評価パーサーを作成しようとしましたが、評価よりもさらに遅く実行されます。
それで、私が聞きたいのは、数式文字列を高速に評価する方法や、eval() のパフォーマンスを改善する方法があるかどうかです。サードパーティのパッケージは使用できません。
元の問題はこのようなものです。1234567 のような数字の文字列があり、1+23-4+56-7 のように数字の間に +、-、または何も挿入できません。したがって、特定の数値文字列には 3^(digit-1) の組み合わせがあります
次のような文字列を計算して生成するためにPythonで実装するもの
import itertools
def gen_Eq(op, num):
temp = [None]*(2*len(num)-1)
temp[::2] = num
temp[1::2] = op
string = ''.join(temp)
return string
def cal_Eq(num_string):
op_list = tuple(itertools.product(['+','-',''],repeat=len(num_string)-1))
eq = list(map(gen_Eq,op_list,itertools.repeat(num_string,len(op_list))))
print map(eval,eq)