我需要此功能才能返回位于奇数索引的元素的总和。这就是我现在拥有的:
def getSumOdds(aList):
for element in aList:
if element % 2 == 1:
由于您正在执行for element in aList
,element % 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]
从start
到end
提供每个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])