Этот генератор возвращает все элементы списка, которые не попадают между 5
и 8
в списке. Затем мы можем передать этот генератор в sum
, чтобы получить сумму этих значений. Он работает, беря все предметы, которые не 5
, затем игнорируя все предметы, которые не 8
, а также игнорируя первые 8
, которые он видит после 5
from itertools import takewhile, dropwhile
def outside(iterable, start, end):
it = iter(iterable)
yield from takewhile(start.__ne__, it)
yield from dropwhile(end.__eq__, dropwhile(end.__ne__, it))
print(sum(outside([1,2,2,5,3,1,7,8,4], 5, 8)))
# 9
print(list(outside([1,2,2,5,3,1,7,8,4], 5, 8)))
# [1, 2, 2, 4]