[英]how to only sum a part of elements in a list
我需要這個函數來返回位於奇數索引處的元素的總和。 這就是我現在所擁有的:
def getSumOdds(aList):
for element in aList:
if element % 2 == 1:
由於您正在for element in aList
中的element % 2 == 1
執行操作,因此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]
給出從start
到end
(隱式結束)的每個jump
-th 元素,您可以執行以下操作:
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])
。
使用您已經開始的代碼, 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)
只是您可以使用列表切片list[1::2]
或函數
def getSumOdds(aList):
return sum(aList[1::2])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.