我有一個任務:創建一個函數,它將整數列表作爲參數,並返回整數列表中所有偶數整數的和,而不使用任何種類的循環。所有添加必須由+運營商完成。下面是我的解決辦法在整數列表中加上偶數整數(無循環)
def sumTest(list_Of_Integers):
return sum(list(filter(lambda x: x%2 == 0, list_Of_Integers)))
我想問一下,如果有任何更好的解決方案,就像沒有使用python的內置和()。
感謝
我有一個任務:創建一個函數,它將整數列表作爲參數,並返回整數列表中所有偶數整數的和,而不使用任何種類的循環。所有添加必須由+運營商完成。下面是我的解決辦法在整數列表中加上偶數整數(無循環)
def sumTest(list_Of_Integers):
return sum(list(filter(lambda x: x%2 == 0, list_Of_Integers)))
我想問一下,如果有任何更好的解決方案,就像沒有使用python的內置和()。
感謝
如上評論指出,這樣做的更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:])
這個版本的堆棧深度將日誌(列表的大小)
謝謝。自從我閱讀上面的評論以來,我一直在嘗試執行遞歸求和函數。您的解決方案運作良好現在我正在測試 –
你可以做'reduce'與另一個'lambda',使用'+',但我認爲'sum'比這更好。 (但我認爲在Python 3中,'reduce'已被移除?)另外,不應該使用'list'。 –
pythonic略微更多(使用列表理解):'sum([x for list_Of_Integers其中x%2 == 0])' – Phylogenesis
這聽起來非常像作業/課程作業問題。你可能應該看看遞歸解決方案,因爲'sum'和'reduce'也(內部)使用循環。 – UloPe