我知道之前有人问过类似的问题,但我的情况略有不同。我想编写一个函数,它接受一个正整数列表,并返回位于奇数索引处的元素之和。问题是,我想只使用for循环或while循环。 这就是我到目前为止所拥有的:
def getSumOdds(aList):
for i in range(0, len(aList)):
if i%2 == 0:
pass
if i%2 != 0:
sum = sum + aList[i]
return sum
然而,当我将此代码输入Python时,我收到一条错误,提出内容为:builtins.UnboundLocalError:local variable' sum'在分配之前引用。有谁知道找到总和或如何修复错误消息的更好方法?提前谢谢。
答案 0 :(得分:1)
要解决此问题,您应该在<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
<input type="checkbox" class = "radiobtn">
<a href="#">Notifications</a>
</li>
</ul>
之后将sum
初始化为零。另一件事是在def
之后return
sum
,而不是在for
之内。
(由于这个问题显然是关于作业,我宁愿不讨论解决问题本身的先进方法。)
答案 1 :(得分:1)
您可以使用生成器(或列表推导):
def getSumOdds(aList):
return sum(aList[i] for i in range(1,len(aList),2))
(支持索引(list
支持))。
或者您可以像@MSeifert所说的那样使用切片:
def getSumOdds(aList):
return sum(aList[1::2])
(支持切片,并非所有集合都这样做)
这就是你所需要的:sum
是一个内置函数。
如果aList
是生成器(例如,您无法访问 i -th元素),则可以使用itertools.islice
:
from itertools import islice
def getSumOdds(aList):
return sum(islice(aList,1,None,2))
您也可以将此方法用于列表等(只要aList
可迭代)。
或者 - 再次给定索引支持 - 您可以将其放在for
循环中:
def getSumOdds(aList):
result = 0
for i in range(1,len(aList),2):
result += aList[i]
return result