我有一个任务:创建一个函数,它将整数列表作为参数,并返回整数列表中所有偶数整数的和,而不使用任何种类的循环。所有添加必须由+运营商完成。下面是我的解决办法在整数列表中加上偶数整数(无循环)
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