如何仅总和列表中的一部分元素



我需要此功能才能返回位于奇数索引的元素的总和。这就是我现在拥有的:

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

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

您可以做的是:

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

这会贯穿所有 indices ,如果它很奇怪,则将元素添加到该索引中。

该方法很容易理解;但是,它经历了不必要的元素:

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]startend提供每个jump -TH元素(Inginity the 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])

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

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)

您只需使用列表slice list[1::2]或功能

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

相关内容

最新更新