операция для каждого элемента в списке python
Создать функцию, которая принимает последовательность и знак. Например, func('+', [1, 2, 3, 4, 5]). К каждому элементу последовательности применяется данный знак, а после возвращается результат. Знаки: +, -,*,/
def test(s, a):
if s == "+":
sum_ = 0
for i in a:
sum_ += i
return sum_
if s == "-":
count = 0
sub = 0
while count != len(a):
count += 1
sub = a[count- 1] - a[count]
return sub
Подскажите,почему не получается?
Ответы (2 шт):
вот общий принцип (я не стал в функцию заворачивать)
основная идея - для каждой операции определить свою функцию и вызывать ее потом для всех элементов списка
# лямбда-функции для операций
signs = {
'+': lambda a, b: a + b,
'-': lambda a, b: a - b,
'*': lambda a, b: a * b,
}
# текущая операция
sign = '*'
# текущий массив
arr = [1, 2, 3, 4, 5]
# применить операции ко всем элементам
res = arr[0]
for i in range(1, len(arr)):
res = signs[sign](res, arr[i])
# вывести результат
print(res)
можно использовать reduce для облегчения кода:
from functools import reduce
# лямбда-функции для операций
signs = {
'+': lambda a, b: a + b,
'-': lambda a, b: a - b,
'*': lambda a, b: a * b,
}
# текущая операция
sign = '*'
# текущий массив
arr = [1, 2, 3, 4, 5]
# применить операции ко всем элементам
res = reduce(signs[sign], arr)
# вывести результат
print(res)
P.S.
можно сделать через операторы (спасибо @5c0rp за замечание):
import operator
signs = {
'+': operator.add,
'-': operator.sub,
'*': operator.mul,
}
проблема здесь
sub = a[count- 1] - a[count]
вы в sub записываете разницу текущего и предыдущего элемента, но его самого нигде не используете
вам надо вначале в sub записать первый элемент списка и вычитать из него
count = 0
sub = a[0]
while count != len(a):
count += 1
sub -= a[count]