Сумма чисел, исключая те, которые идут между 5 и 8 (5 и 8 включительно) - PullRequest
0 голосов
/ 31 октября 2018

Как найти сумму всех чисел в списке [1,2,2,5,3,1,7,8,4], которые не лежат между 5 и 8 (5 и 8 также не должны учитываться в сумме) в Python (то есть сумма = 1+ 2 + 2 + 4 = 9)?

Ответы [ 4 ]

0 голосов
/ 01 ноября 2018

Попробуйте использовать передачу выражения генератора в sum:

>>> lst = [1,2,2,5,3,1,7,8,4]
>>> sum(i for i in lst if not 5 <= i <= 8)
13
0 голосов
/ 31 октября 2018

Вы можете использовать range(5, 8+1), чтобы определить список номеров, которые нужно исключить, и просто просмотреть свои числа и исключить диапазон,

numbers =  [1,2,2,5,3,1,7,8,4]
exclude = range(5, 8+1)  # exclude numbers 5,6,7,8

# sum numbers excluding numbers between 5-8
print(sum(number for number in numbers if number not in exclude))
# output,
13
0 голосов
/ 01 ноября 2018

Этот генератор возвращает все элементы списка, которые не попадают между 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]
0 голосов
/ 31 октября 2018
sum = 0
for number in [1,2,2,5,3,1,7,8,4]:
    if not 5 <= number <= 8:
        sum += number
...