我有一个任务:创建一个函数,它将一个整数列表作为参数,并返回整数列表中所有偶数整数的总和,而不使用任何类型的循环。所有添加必须仅由+运算符完成。以下是我的解决方案
def sumTest(list_Of_Integers):
return sum(list(filter(lambda x: x%2 == 0, list_Of_Integers)))
我想问一下是否有更好的解决方案,比如没有使用python的内置sum()。
由于
答案 0 :(得分: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:])
这将根据列表的大小生成一个函数堆栈。
如果要生成较浅的堆栈,则可以执行以下操作:
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:])
此版本的堆栈深度为log(列表大小)