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

2024-04-26 15:04:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下清单:

list1 = [1, 5, 7, 13, 29, 35, 65, 91, 145, 203, 377, 455, 1015, 1885, 2639, 13195]

我如何将列表中的每个数字相乘?例如1 * 5 * 7 * 13 * 29..etc。在

以下代码是否正确?公司名称:

^{pr2}$

Tags: 代码名称列表etc公司数字list1pr2
2条回答

作为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
    

这里最简单的方法是使用一个reduce操作,它可以做到:

from functools import reduce
import operator

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

Reduce的意思是:将此操作应用于索引0和1。获取结果,然后对结果和索引2应用操作。如此等等。在

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

^{pr2}$

这会做同样的事情。在

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

相关问题 更多 >