последовательность операций над списком
дан список чисел переменной длинны
a = [10, 45, 14, 7, 78, 90, 34]
над списком необходимо последовательно совершить математические операции:
10 + 45 - 14 * 7 / 78 + 90 - 34
именно в такой последовательности, а не в математической. Т.е. Первый элемент сложить со вторым из полученной суммы вычесть третий элемент, полученную разность умножить на четвертый элемент, на полученное произведение поделить нацело пятый элемент и т.д.
из-за того, что длинна списка может быть разной решение вида:
((((lst[0]+lst[1])-lst[2])*lst[3])/lst[4])
не подходит... подскажите, пожалуйста простое и изящное решение...
Ответы (2 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Не знаете длину, используйте цикл:
import itertools
a = [10, 45, 14, 7, 78, 90, 34]
ops = itertools.cycle('+-*/')
it = iter(a)
result = next(it)
for op, v in zip(ops, it):
print(result, op, v, end=' = ')
if op == '+':
result += v
if op == '-':
result -= v
if op == '*':
result *= v
if op == '/':
result //= v
print(result)
print(result)
$ python calculator.py 10 + 45 = 55 55 - 14 = 41 41 * 7 = 287 287 / 78 = 3 3 + 90 = 93 93 - 34 = 59 59
Или так:
import itertools
import operator
a = [10, 45, 14, 7, 78, 90, 34]
ops = itertools.cycle((
operator.add,
operator.sub,
operator.mul,
operator.floordiv
))
it = iter(a)
result = next(it)
for op, v in zip(ops, it):
print(result, op.__name__, v, end=' = ')
result = op(result, v)
print(result)
print(result)
$ python calculator.py 10 add 45 = 55 55 sub 14 = 41 41 mul 7 = 287 287 floordiv 78 = 3 3 add 90 = 93 93 sub 34 = 59 59
Автор решения: Xander
→ Ссылка
from operator import add, sub, mul, truediv
from itertools import cycle
from functools import reduce
# Входные данные
items = [10, 45, 14, 7, 78, 90, 34]
operations = cycle([add, sub, mul, truediv]) # зацикленные операторы +-*/
func = lambda x, y: next(operations)(x, y)
result = reduce(func, items)
print(result)