2015-07-28 31 views
-1

我有一個任務:創建一個函數,它將整數列表作爲參數,並返回整數列表中所有偶數整數的和,而不使用任何種類的循環。所有添加必須由+運營商完成。下面是我的解決辦法在整數列表中加上偶數整數(無循環)

def sumTest(list_Of_Integers): 
    return sum(list(filter(lambda x: x%2 == 0, list_Of_Integers))) 

我想問一下,如果有任何更好的解決方案,就像沒有使用python的內置和()。

感謝

+0

你可以做'reduce'與另一個'lambda',使用'+',但我認爲'sum'比這更好。 (但我認爲在Python 3中,'reduce'已被移除?)另外,不應該使用'list'。 –

+2

pythonic略微更多(使用列表理解):'sum([x for list_Of_Integers其中x%2 == 0])' – Phylogenesis

+0

這聽起來非常像作業/課程作業問題。你可能應該看看遞歸解決方案,因爲'sum'和'reduce'也(內部)使用循環。 – UloPe

回答

0

如上評論指出,這樣做的更pythonic的方法是使用list comprehension

def sumTest(list_Of_Integers): 
    return sum([x for x in list_Of_Integers where x % 2 == 0]) 

由於@UloPe狀態,然而,這聽起來很像一個功課問題,在這種情況下,更遞歸方法可以預期的(而不是使用sum()功能):

def sumTest2(xs): 
    if len(xs) == 0: 
     return 0 

    total = xs[0] if xs[0] % 2 == 0 else 0 

    return total + sumTest2(xs[1:]) 

這將發電機密封e取決於列表大小的功能堆棧。

如果你想生成一個淺棧,那麼你就可以做到以下幾點:

def sumTest3(xs): 
    if len(xs) == 0: 
     return 0 

    midpoint = len(xs)/2 
    total = xs[midpoint] if xs[midpoint] % 2 == 0 else 0 

    return sumTest3(xs[:midpoint]) + total + sumTest3(xs[midpoint + 1:]) 

這個版本的堆棧深度將日誌(列表的大小)

+0

謝謝。自從我閱讀上面的評論以來,我一直在嘗試執行遞歸求和函數。您的解決方案運作良好現在我正在測試 –