给定一个像[1,2,3,4,5,6]这样的数字列表,我如何编写代码将它们相乘,即计算1*2*3*4*5*6?
当前回答
在Python 3.8及以上版本中,数学标准库模块为此提供了.prod:
数学。Prod(可迭代,*,start=1)
该方法返回起始值(默认值:1)乘以数字可迭代对象的乘积:
import math
math.prod([1, 2, 3, 4, 5, 6])
# 720
如果可迭代对象为空,将产生1(或者起始值,如果提供)。
其他回答
nums = str(tuple([1,2,3]))
mul_nums = nums.replace(',','*')
print(eval(mul_nums))
我个人喜欢这样一个函数,它将泛型列表的所有元素相乘:
def multiply(n):
total = 1
for i in range(0, len(n)):
total *= n[i]
print total
它很紧凑,使用简单的东西(一个变量和一个for循环),对我来说感觉很直观(它看起来像我想到的问题,只是取一个,乘以它,然后乘以下一个,等等!)
在这个帖子里有很多很好的答案。如果您想在实际生产中进行列表相乘,我建议使用标准numpy或math包。
如果你只是在寻找一个快速而肮脏的解决方案,你不想导入任何东西,你可以这样做:
l = [1,2,3,4,5,6]
def list_multiply(l):
return eval('*'.join(map(str,l)))
print(list_multiply(l))
#Output: 720
Map (str,l)将列表中的每个元素转换为字符串。Join将每个元素组合成一个由*符号分隔的字符串。Eval将字符串转换回可以求值的函数。
警告:使用eval被认为是危险的,特别是当程序接受用户输入时,因为用户可能会向代码中注入任何函数并危及您的系统。
简单的方法是:
import numpy as np
np.exp(np.log(your_array).sum())
那么使用递归呢?
def multiply(lst):
if len(lst) > 1:
return multiply(lst[:-1])* lst[-1]
else:
return lst[0]