将数字列表求和,直到找到数字X.

时间:2015-10-11 16:59:40

标签: python list python-2.7 sum

在我的程序中,我需要设置 while 函数,该函数对此列表求和,直到找到特定数字:

[5,8,1,999,7,5]

输出应该是14,因为它总和5 + 8 + 1并在找到999时停止。

我的想法如下:

def mentre(llista):
  while llista != 999:
    solution = sum(llista)
return solution

4 个答案:

答案 0 :(得分:2)

使用iter-function: >>> l = [5,8,1,999,7,5] >>> sum(iter(iter(l).next,999)) 14 iter调用第一个参数,直到找到第二个参数。所以所有数字都总结,直到找到999。

答案 1 :(得分:2)

由于您提到使用while循环,您可以使用itertools.takewhile尝试基于生成器的方法:

>>> from itertools import takewhile
>>> l = [5,8,1,999,7,5]
>>> sum(takewhile(lambda a: a != 999, l))
14

只要谓词(l)为真,生成器就会从列表a != 999中消耗,并将这些值相加。谓词可以是您喜欢的任何内容(例如普通while循环),例如您可以在值小于500时对列表求和。

答案 2 :(得分:1)

显式使用while循环的示例如下:

def sum_until_found(lst, num):
    index = 0
    res = 0
    if num in lst:
        while index < lst.index(num):
            res += lst[index]
            index += 1
    else:
        return "The number is not in the list!"
    return res

另一种可能的方式是:

def sum_until_found(lst, num):
    index = 0
    res = 0
    found = False
    if num in lst:
        while not found:
            res += lst[index]
            index += 1
            if lst[index] == num:
                found = True
    else:
        return "The number is not in the list!"
    return res

有很多方法可以在不使用while循环的情况下执行此操作,其中一种方法是使用递归:

def sum_until_found_3(lst, num, res=0):
    if num in lst:
        if lst[0] == num:
            return res
        else:
            return sum_until_found_3(lst[1:], num, res + lst[0])
    else:
        return "The number is not in the list!"

最后,一个更简单的解决方案:

def sum_until_found(lst, num):
    if num in lst:
        return sum(lst[:lst.index(num)])
    else:
        return "The number is not in the list!"

答案 3 :(得分:0)

使用None和切片

{{ ... }}

演示

index