给定一个像[1,2,3,4,5,6]这样的数字列表,我如何编写代码将它们相乘,即计算1*2*3*4*5*6?


当前回答

我个人喜欢这样一个函数,它将泛型列表的所有元素相乘:

def multiply(n):
    total = 1
    for i in range(0, len(n)):
        total *= n[i]
    print total

它很紧凑,使用简单的东西(一个变量和一个for循环),对我来说感觉很直观(它看起来像我想到的问题,只是取一个,乘以它,然后乘以下一个,等等!)

其他回答

你可以使用:

import operator
import functools
functools.reduce(operator.mul, [1,2,3,4,5,6], 1)

参见约简和算子。Mul文档进行解释。

你需要在Python 3+中导入functools行。

在Python 3.8及以上版本中,数学标准库模块为此提供了.prod:

数学。Prod(可迭代,*,start=1)

该方法返回起始值(默认值:1)乘以数字可迭代对象的乘积:

import math
math.prod([1, 2, 3, 4, 5, 6])
# 720

如果可迭代对象为空,将产生1(或者起始值,如果提供)。

Numpy有一个prod()函数,它返回一个列表的乘积,或者在这个例子中,因为它是Numpy,它是一个数组在给定轴上的乘积:

import numpy
a = [1,2,3,4,5,6]
b = numpy.prod(a)

...或者你可以导入numpy.prod():

from numpy import prod
a = [1,2,3,4,5,6]
b = prod(a)

一种使用方法是math.prod() 例如:

import math
arr = [1, 2, 3, 4]
print(math.prod(arr))

另一种方法是numpy.prod() 这是另一个要导入的库

import numpy
arr = [1, 2, 3, 4]
print(numpy.prod(arr))

Python 3:使用functools.reduce:

>>> from functools import reduce
>>> reduce(lambda x, y: x*y, [1, 2, 3, 4, 5, 6])
720

Python 2:使用reduce:

>>> reduce(lambda x, y: x*y, [1, 2, 3, 4, 5, 6])
720

为了兼容2和3,请使用Six (pip install Six),然后:

>>> from six.moves import reduce
>>> reduce(lambda x, y: x*y, [1,2,3,4,5,6])
720