如何只对列表中的一部分元素求和

时间:2017-09-26 00:26:55

标签: python sum

我需要这个函数来返回位于奇数索引处的元素之和。 这就是我现在所拥有的:

def getSumOdds(aList):
    for element in aList:
        if element % 2 == 1:

3 个答案:

答案 0 :(得分:2)

由于您正在执行for element in aListelement % 2 == 1将检查每个元素是否为奇数,而不是其索引是否为奇数。

你可以做的是:

value = 0
for index in range(len(aList)):
    if index % 2 == 1:
        value += aList[value]

这将遍历所有索引,如果它是奇数,则将该索引的元素添加到累加器。

这种方法很容易理解;然而,它经历了不必要的元素数量:

value = 0
for index in range(1, len(aList), 2):
    value += aList[index]

range(x, y, z)生成从x开始计算的所有元素,但不包括y,按z计算。这从1开始,每2个元素。

这是相当长的,可以缩短为以下内容:

value = sum(aList[index] for index in range(1, len(aList), 2))

使用列表切片,其中aList[start:end:jump]为每个jump元素提供从start开始到end(最终的隐含),您可以执行以下操作:

value = sum(aList[1::2])

这是从第一个元素开始的每一个元素的总和。

如果您的输入不一定是可索引的(也就是说,它可以迭代但不能使用[index]语法,例如集合,范围,地图等),您可以这样做:

value = sum(val for index, val in enumerate(anIter) if index % 2 == 1)

通过获取每个枚举值的索引和值,将索引为奇数的每个值相加。 enumerate函数是一个可迭代的函数,返回(0, a[0]), (1, a[1]), ..., (len(a) - 1, a[-1])

答案 1 :(得分:1)

使用您已经启动的代码,enumerate可能是您想要的函数,它返回计数和列表中的值。然后我们过滤奇数索引并将它们添加到总和的变量中,就像您已经完成的那样:

def getSumOdds(aList):
    total = 0
    for index, element in enumerate(aList): 
        if index % 2 == 1:
            total += element
    return total

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]

print getSumOdds(l) # 20 (odd indices: 2+4+6+8=20)

答案 2 :(得分:0)

您可以使用列表切片list[1::2] 或功能

def getSumOdds(aList):
    return sum(aList[1::2])