2015-07-28 55 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

谢谢。自从我阅读上面的评论以来,我一直在尝试执行递归求和函数。您的解决方案运作良好现在我正在测试 –