在我的程序中,我需要设置 while 函数,该函数对此列表求和,直到找到特定数字:
[5,8,1,999,7,5]
输出应该是14,因为它总和5 + 8 + 1并在找到999时停止。
我的想法如下:
def mentre(llista):
while llista != 999:
solution = sum(llista)
return solution
答案 0 :(得分:2)
答案 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