Python 3.x 整数列表中的偶数整数之和(无循环)
我有一个任务:创建一个函数,该函数将整数列表作为参数,并返回整数列表中所有偶数整数的总和,而不使用任何类型的循环。所有添加操作只能由+操作员完成。下面是我的解决方案Python 3.x 整数列表中的偶数整数之和(无循环),python-3.x,Python 3.x,我有一个任务:创建一个函数,该函数将整数列表作为参数,并返回整数列表中所有偶数整数的总和,而不使用任何类型的循环。所有添加操作只能由+操作员完成。下面是我的解决方案 def sumTest(list_Of_Integers): return sum(list(filter(lambda x: x%2 == 0, list_Of_Integers))) 我想问问是否有更好的解决方案,比如不使用python的内置sum() 谢谢你,正如上面评论中所说的,一种更具python风格的方法是使用
def sumTest(list_Of_Integers):
return sum(list(filter(lambda x: x%2 == 0, list_Of_Integers)))
我想问问是否有更好的解决方案,比如不使用python的内置sum()
谢谢你,正如上面评论中所说的,一种更具python风格的方法是使用: 然而,正如@UloPe所说,这听起来很像一个家庭作业问题,在这种情况下,可能需要一个更递归的方法(而不是使用
sum()
函数):
这将根据列表的大小生成函数堆栈
如果要生成较浅的堆栈,则可以执行以下操作:
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(列表大小)您可以使用
+
使用另一个lambda
来减少,但我认为总和
比这要好得多。(但我认为在Python3中,reduce
被删除了吗?)另外,list
应该不需要。稍微有点pythonic(使用列表理解):sum([x代表x在整数列表中,其中x%2==0])
这听起来很像是一个家庭作业/课程问题。您可能应该研究递归解决方案,因为sum
和reduce
也(在内部)使用循环。谢谢。自从我读了上面的评论之后,我一直在尝试使用递归求和函数。你的解决方案很有效。现在我正在测试
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:])