TL; DR: см. Код внизу.
Я реализую калькулятор обратной польской записи в Python, используя реализацию стека collection.deque .
Поскольку я обрабатываю также случай функций с несколькими аргументами, я использую символ-разделитель, который ставлю перед фактическими аргументами.Например, учитывая следующее выражение в качестве входных данных: max(2, 3, 4)
, алгоритм Shunting Yard создает следующую итерацию: ['|', '2', '3', '4', 'max']
.
Когда я итерирую по нему, разделитель и числапомещаются в стек;если встречается функция, все предыдущие элементы до разделителя «выталкиваются» из стека и добавляются в список.
Есть ли более питонный способ выталкивать элементы из конца стекадо определенного состояния?Мой код пока:
args = []
while op_stack[-1] != FUNC_ARGS_SEPARATOR:
args.append(op_stack.pop())