使用python的新手。想知道如何使用while
循环创建一个函数来获取列表中某个数字之前的数字总和。例如,我希望在列表[1,2,5,2,3,2]中弹出的数字3之前获得所有数字的总和,这将导致10。使用我的错误代码,我的函数没有'考虑3并且只添加所有数字。
def nothree(nt):
while nt != 3:
list_sum = sum(nt)
return list_sum
答案 0 :(得分:1)
def nothree(nt):
i = 0
sum = 0
while nt[i]:
if nt[i] is 3:
break
sum += nt[i]
i += 1
return sum
这样你就可以出于任何原因保持while循环。但是在python中你也可以这样:
def nothree(nt):
for i in nt[:-2]:
sum += [i]
return list_sum
答案 1 :(得分:0)
您可以将itertools.takewhile
用于此模式:
from itertools import takewhile
def nothree(nt):
return sum(takewhile(lambda x: x != 3, nt))
>>> nothree([1, 2, 5, 2, 3, 1])
10
虽然Fejs为您提供了一个基于循环的指导解决方案,但我可能会添加这个单行黑客,无需任何库:
return sum(x if x != 3 else next(iter([])) for x in nt)
StopIteration
引发的next(iter([]))
将停止第一个3
上的生成器。
答案 2 :(得分:0)
这样的事情:
def nothree(nt):
sum = 0
for n in nt:
if n == 3:
break
sum += n
return sum
如果列表中有3个,它将打破循环并返回3之前的数字总和。如果列表中没有3,则总和将是列表的总和。最后,如果列表中没有数字,则sum将为0。
答案 3 :(得分:0)
你也可以做一行
nt = [1,2,5,2,3,2]
x = sum(nt[:nt.index(3)])
nt[:nt.index(3)]
会在列表中第一次出现3
之前为您提供列表。即。 [1, 2, 5, 2]