我需要这个函数来返回位于奇数索引处的元素之和。 这就是我现在所拥有的:
def getSumOdds(aList):
for element in aList:
if element % 2 == 1:
答案 0 :(得分:2)
由于您正在执行for element in aList
,element % 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])