一旦达到某个值,如何停止对列表进行迭代

时间:2019-07-17 21:24:33

标签: python list iteration

对于此问题,给出了一个整数列表。我需要找到列表的平均值。唯一的问题是,一旦达到负数,就不应在计算之后考虑任何数字。这是我到目前为止的内容:

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))

我已经为此工作了一段时间,被卡住了。有提示吗?

3 个答案:

答案 0 :(得分:2)

您可以使用itertools.takewhiledoc):

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)

这是continuebreak的经典用例。要确定要选择哪一个,必须决定是否要跳过负数或完全停止执行。

continue跳过循环的一次迭代,而break完全停止执行循环。