Записать в список математическое выражение python

Есть легальный способ записать в list мат.выражение?

из этого:

a = 1 + 2 + 3

сделать это:

a = [1, +, 2, +, 3]

Это нужно, что бы можно было запросить у пользователя выражение целиком для калькулятора. Потому что, как реализовать, что бы калькулятор принимал сразу все выражение, я не нашел. (eval не предлагать)


Ответы (4 шт):

Автор решения: Muxe1

Используй rsplit

a = input("Выражение \n")
if " " in a:
    b = a.rsplit(' ')
    print(b)
else:
    a = " ".join(a)  
    b = a.rsplit(' ')
    print(b)
→ Ссылка
Автор решения: CrazyElf

Если я правильно понял. Можно записывать с любым числом пробелов или вообще без них:

expr = "1 + 2 + 3"
lst = [x for x in list(expr) if x.strip()]
print(lst)

Вывод:

['1', '+', '2', '+', '3']

Ещё один "функциональный" вариант (без спискового сокращения, одни функции):

lst = list(filter(len, map(str.strip, expr)))

Результат будет тот же.

Хотя это сработает только для одиночных чисел...

→ Ссылка
Автор решения: Andy Pavlov

Можно воспользоваться регулярными выражениями, чтобы вычленить параметры выражения и операторы для них:

import re
var = '1 - 2 + 3 - 4'
expr = re.findall('([+-]?)\s*([\d]+)', var)
print(expr)  # [('', '1'), ('-', '2'), ('+', '3'), ('-', '4')]

Потом можно пройтись по списку кортежей, где на первом месте у нас оператор, а на втором значение для него, и какой-нибудь функцией собрать результат.

→ Ссылка
Автор решения: опачр

a=(1+y)*(x+(y/(x**2+4))/(math.exp(2)+(1/(x**2+4))))

→ Ссылка