簡體   English   中英

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

[英]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]給出從startend (隱式結束)的每個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM