如何在Python

时间:2017-02-22 09:18:39

标签: python python-3.x sum indices

我知道之前有人问过类似的问题,但我的情况略有不同。我想编写一个函数,它接受一个正整数列表,并返回位于奇数索引处的元素之和。问题是,我想只使用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'在分配之前引用。有谁知道找到总和或如何修复错误消息的更好方法?提前谢谢。

2 个答案:

答案 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