将列表中的连续数字相乘?

时间:2017-04-19 15:00:32

标签: python loops

我有以下列表:

Property

如何将列表中的每个数字相乘?例如list1 = [1, 5, 7, 13, 29, 35, 65, 91, 145, 203, 377, 455, 1015, 1885, 2639, 13195]

我是否使用下面的代码在正确的轨道上?:

1 * 5 * 7 * 13 * 29..etc

2 个答案:

答案 0 :(得分:8)

这里最简单的方法是使用reduce操作来完成这个:

from functools import reduce
import operator

reduce(operator.mul, [1, 2, 3])
>>> 6

Reduce基本上是这样说:将此操作应用于索引0和1.获取结果,然后将操作应用于该结果和索引2.依此类推。

operator.mul只是用于表示乘法的少量语法糖,它可以很容易地用另一个函数替换。

def multiply(a, b):
    return a * b
reduce(multiply, [1,2,3])

这将完全相同。

reduce函数在Python 2中可用,但是it was removed and is only available in functools in Python 3。确保导入reduce将确保Python 2/3的兼容性。

答案 1 :(得分:3)

作为operator模块和operator.mul的替代方案,您可以执行以下操作:

  • 一个基本的for循环:

    list1 = [1,2,3,4,5]
    product = 1
    for item in list1:
        product *= item
    print(product)           #  120
    
  • 使用numpy模块:

    from numpy import prod
    list1 = [1,2,3,4,5]
    print(prod(list1))       #  120
    
  • 导入functools并应用lambda函数:

    from functools import reduce
    list1 = [1,2,3,4,5]
    print(reduce(lambda x, y: x * y, list1))      #  120
    

    from functools import reduce
    list1 = [1,2,3,4,5]
    prodFunc = lambda x, y: x * y
    print(reduce(prodFunc, list1))      #  120
    

    ,没有lambda:

    from functools import reduce
    list1 = [1,2,3,4,5]
    def prodFunc(a,b):
        return a * b
    print(reduce(prodFunc, list1))      #  120