Вопрос решается в одно действие, господа велосипедостроители.
import re
a = "(10+20)*3+5"
print re.findall('(\d+|\D)', a)
Вот решение более универсальное, позволяет избавиться от пробелов и воспринимает float.
import re
a = "(10,00 +2.0 )*3+5"
print re.findall('(\d+[,\.]?\d+|\S)', a)