sympy: проверка и синтаксический анализ выражения из строки

#python #parsing #sympy

#python #синтаксический анализ #sympy

Вопрос:

Я не так хорошо знаком с sympy, и я пытаюсь, учитывая строку:

  • проверьте, соответствует ли эта строка, однажды преобразованная в выражение sympy, определенному «шаблону», в моем случае «A ** a * B ** b * C ** c».
  • если это так, проанализируйте строку, чтобы получить соответствующие символы этого шаблона. пример: «foo**2*bar **1* toto **38» будет проанализирован как {«foo»: 2, «bar»: 1, «toto»:38}.

Я думал, что мог бы использовать solve, чтобы получить все полномочия, но это кажется очень неэффективным..

Приветствия

Ответ №1:

Кажется, это именно то, что вам нужно:

 from sympy.parsing.sympy_parser import parse_expr

string = "foo**2*bar**1*toto**38"
parsed = parse_expr(string)
print(parsed.as_powers_dict())  
# output: defaultdict(<class 'int'>, {bar: 1, foo: 2, toto: 38})
  

Комментарии:

1. Потрясающее, большое спасибо! Кроме того, я думаю, чтобы проверить, соответствует ли строка шаблону, мне просто нужно проверить ключи возвращаемого dict 😉

2. О, да, поэтому мой ответ касается только второй части вашего вопроса. Для первой части вы можете проверить, что len из возвращаемых dict равно 3.

3. Кроме того, если мой ответ решает вашу проблему, вы можете пометить мой ответ как принятый. Будущим читателям этого вопроса будет полезно знать, что эта проблема может быть решена с использованием моего ответа. Вот как работает SO.

4. Я сделал, но «Голоса, поданные лицами с репутацией менее 15, записываются, но не изменяют публично отображаемую оценку публикации».