求和整数列表中的整数(无循环)

时间:2015-07-28 09:46:54

标签: python-3.x

我有一个任务:创建一个函数,它将一个整数列表作为参数,并返回整数列表中所有偶数整数的总和,而不使用任何类型的循环。所有添加必须仅由+运算符完成。以下是我的解决方案

def sumTest(list_Of_Integers):
    return sum(list(filter(lambda x: x%2 == 0, list_Of_Integers)))

我想问一下是否有更好的解决方案,比如没有使用python的内置sum()。

由于

1 个答案:

答案 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(列表大小)