Python将列表中的所有偶数相乘

时间:2016-10-03 15:48:16

标签: python list numbers multiplying

我正在为我的第一个编程类开发这个python代码。昨天它部分工作,但后来我改变了一些东西,现在它只传递了1个测试用例。目标是将列表“xs”中的所有偶数相乘,如果没有偶数则返回1。我做错了什么,我该如何解决?

def evens_product(xs):
    product = 2
    for i in xs:
        if i%2 == 0:
            product *= i
            return product

    else:
        return (1) 

编辑:Chepner的解决方案有效地感谢所有帮助过的人

3 个答案:

答案 0 :(得分:3)

您需要初始化product = 1,原因有两个。一个,简单地说,你会得到错误的答案。 evens_product([4])应该返回4而不是8。 第二,它可以使您免于必须处理没有偶数的列表作为特殊情况。如果没有偶数,则永远不要更改product的值并保持不变。

def evens_product(xs):
    product = 1
    for i in xs:
        if i%2 == 0:
            product *= i
    return product

答案 1 :(得分:0)

一种实现方法是使用reduce()中的functools函数和operator.mul()函数。

reduce()函数接受一个函数,该函数接受三个参数(在这种情况下为operator.mul()),一个可迭代的变量(在这种情况下为列表)和默认值。

它将功能应用于前两个元素,并产生结果。它获取该结果,并将该函数应用于结果和列表的第三个元素,然后将该结果应用于第四个元素,依此类推。重复此过程,直到所有参数都被迭代为止。

在这种情况下,operator.mul()用于描述乘法运算。例如,operator.mul(2,3)是6。

最后,您可以通过在列表末尾带有if子句的列表理解来选择列表中的偶数。如果数字i是偶数,则值i % 2应该为零,因为%是模运算符,它会在左侧除以右侧后返回余数。

这是实现的样子,尽管您应该为没有偶数的情况(例如,用try: except:块)定义行为。


添加了默认值/初始值1,以避免在列表为空的情况下出错。

import functools, operator
def even_product(lst):
    return functools.reduce(operator.mul, [i for i in lst if i%2 == 0], 1)

答案 2 :(得分:-1)

这将是你的答案:

def evens_product(xs):
    product = 1
    for i in xs:
        if i%2 == 0:
            product *= i  
    return product

由于产品已分配return,因此无需1 1。 由于return循环中有for,因此在识别出第一个偶数后返回值。希望它有所帮助。