总结清单:跳过第一个偶数

时间:2015-01-29 22:25:29

标签: python

我正在尝试总结一个列表,但跳过第一个偶数,然后继续添加列表的其余部分,包括其余的偶数,但我似乎无法正确使用它。

list = [-3, -7, -1, 0, 1, 2, 3, 4, 5, 6, 7] 
def sum_num(num_list):
    sum = 0
    for i in num_list:
        if i % 2 == 0:
            continue
        sum += i
    return sum 
print sum_num(list)

要么我都不加偶数或全部加数。如何制作它只是跳过第一个偶数? 谢谢!

2 个答案:

答案 0 :(得分:4)

将您的if语句更改为仅成功一次。

def sum_num(num_list):
    total = 0
    once = False
    for i in num_list:
        if i % 2 == 0 and not once:
            once = True
            continue
        total += i
    return total

在跳过第一个偶数后,你的布尔once将为True,导致if条件连续均匀失败。

答案 1 :(得分:3)

您也可以利用itertools.takewhile,例如:

from itertools import takewhile

def sum_num(num_list):
    it = iter(num_list)
    before_first_even = takewhile(lambda L: L % 2 != 0, it)
    return sum(before_first_even) + sum(it)

data = [-3, -7, -1, 0, 1, 2, 3, 4, 5, 6, 7]
result = sum_num(data)
# 17

这将创建一个超过num_list的迭代器,并使用它来计算直到第一个偶数的总和...然后it留下列表的其余部分(不包括第一个偶数),所以我们加上这些的总和并返回值......这样可以避免保留一个变量来检查我们是否已经看到了偶数值...