我正在尝试总结一个列表,但跳过第一个偶数,然后继续添加列表的其余部分,包括其余的偶数,但我似乎无法正确使用它。
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)
要么我都不加偶数或全部加数。如何制作它只是跳过第一个偶数? 谢谢!
答案 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
留下列表的其余部分(不包括第一个偶数),所以我们加上这些的总和并返回值......这样可以避免保留一个变量来检查我们是否已经看到了偶数值...