Сумма элементов списка, расположенных между первым и последним положительным элементами
Задание: в списке целых, заполненном случайными числами вычислить сумму элементов, находящихся между первым и последним положительными элементами. Столкнулась с такой проблемой: первую часть задания я сделала (по нахождению чётных элементов), а вторую не могу (при добавлении нового массива происходит ошибка). Помогите, пожалуйста.
import random
randlist = []
lst = []
for i in range(3):
n = random.randint(-10,30)
randlist.append(n)
print(randlist)
positive = 0
for i in range(len(randlist)):
if randlist[i] > 0:
positive+= randlist[i]
print (positive)
for i in range(positive[1],positive[-1]):
lst += positive
print (lst)
Ответы (2 шт):
Если вопрос звучит так "Сумма элементов списка, расположенных между первым и последним положительным элементами", то судя по каментам, задача понята неверно:
эта сумма не должна включать границы "первым и последним", раз явно не указано
эта сумма любых элементов, а не только положительных
lt = [-1, 1, 3, -4, 4, -5, -6, 9, -5, -9, ]
s1 = s2 = 0
for s1, a in enumerate(lt):
if a > 0:
break # определить индекс первого положительного элемента
for s2, a in enumerate(reversed(lt)):
if a > 0:
break # определить индекс последнего положительного элемента
s = sum(lt[s1+1: -s2-1]) # взять сумму между индексами
print(s)
from itertools import dropwhile
from random import choices
data = choices(range(-10, 10), k=20)
print(data)
print(
sum(
list(
dropwhile(
lambda x: x <= 0,
reversed(
list(
dropwhile(
lambda x: x <= 0,
data
)
)[1:]
)
)
)[1:]
)
)
Если считать 0 положительным числом нужно исправить сравнение в обеих лямбдах
[-3, 6, -7, -10, -10, -2, -3, -4, 0, 3, 9, 3, -2, -9, -4, -2, 7, 6, -1, 8]
-26
UPD -> для наглядности
from itertools import dropwhile
from random import choices
data = choices(range(-10, 10), k=10)
print(f'{data = }')
# data = [-9, 5, -1, 1, 2, 3, -2, 4, -4, 4]
cut_left = list(
dropwhile(
lambda x: x <= 0,
data
)
)[1:]
print(f'{cut_left = }')
# cut_left = [-1, 1, 2, 3, -2, 4, -4, 4]
desired = list(
dropwhile(
lambda x: x <= 0,
reversed(
cut_left
)
)
)[1:]
print(f'{desired = }')
# desired = [-4, 4, -2, 3, 2, 1, -1]
# !!! Здесь список в обатном порядке
# Но нам на это пофиг ;-)
print(
f'{sum(desired) = }'
)
# sum(desired) = 3