对于此问题,给出了一个整数列表。我需要找到列表的平均值。唯一的问题是,一旦达到负数,就不应在计算之后考虑任何数字。这是我到目前为止的内容:
def average_rainfall(listInts):
newList = []
count = 0
for num in listInts:
if num < 0:
newList.append(listInts[:num])
count += (1*len(newList))
else:
newList.append(listInts)
count += (1*len(newList))
summ = sum(newList)
avg = summ/count
return avg
列表和函数调用如下:
a_list = [1, 2, 3, 4, 5, -1, 6, 7]
print(average_rainfall(a_list))
我已经为此工作了一段时间,被卡住了。有提示吗?
答案 0 :(得分:2)
您可以使用itertools.takewhile
(doc):
from itertools import takewhile
a_list = [1, 2, 3, 4, 5, -1, 6, 7]
def average_rainfall(listInts):
l = [*takewhile(lambda k: k >=0, listInts)]
return sum(l) / len(l)
print(average_rainfall(a_list))
打印:
3.0
答案 1 :(得分:1)
在break
块内部使用if
,以尽早退出循环。
类似
def average_rainfall(listInts):
newList = []
count = 0
for num in listInts:
if num < 0:
newList.append(num)
count += 1
break
else:
newList.append(num)
count += 1
summ = sum(newList)
avg = summ/count
return avg
编辑:您的append
语句中存在错误。您需要附加当前要迭代的num
,而不是整个列表。
答案 2 :(得分:0)
这是continue
或break
的经典用例。要确定要选择哪一个,必须决定是否要跳过负数或完全停止执行。
continue
跳过循环的一次迭代,而break
完全停止执行循环。