我正试图将列表中的所有数字与其他相乘
a = [2,3,4]
for number in a:
total = 1
total *= number
return total
它的输出应该是24,但由于某种原因,我得到了4。为什么会出现这种情况?
循环的每次迭代都将total初始化为1。
代码应该是:
a = [2, 3, 4]
total = 1
for i in a:
total *= i
这解决了立即的问题,但如果您使用的是Python 3.8或更高版本,则此功能位于math
库中:
import math
a = [2, 3, 4]
total = math.prod(a)
方法1:使用numpy包中的prod函数。
import numpy
...: a = [1,2,3,4,5,6]
...: b = numpy.prod(a)
In [128]: b
Out[128]: 720
方法2:在Python 3.8中,在数学模块中添加了prod:
math.prod(可迭代,*,start=1(
math.prod(a)
会做同样的
如果不想使用numpy,请使用reduce函数。
from functools import reduce
reduce(lambda x, y: x*y, [1, 2, 3, 4, 5])
之所以是4
,是因为在for
循环中,您执行total = 1
,然后在每次迭代中使用当前数字乘以total
。所以它会循环到最后,最后一个元素是4
,你把4乘以1,所以现在总数是4。
如果要将列表中的所有元素多重显示。我建议你使用numpy.prod
:
import numpy as np
list = [2,3,4,5]
final = np.prod(list)