我需要编写一个函数,数的列表 ,并在一起相乘 。 例如: [1,2,3,4,5,6]
会给我1*2*3*4*5*6
。 我真的需要你的帮助。
Answer 1:
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兼容使用pip install six
,则:
>>> from six.moves import reduce
>>> reduce(lambda x, y: x*y, [1,2,3,4,5,6])
720
Answer 2:
您可以使用:
import operator
import functools
functools.reduce(operator.mul, [1,2,3,4,5,6], 1)
见reduce
和operator.mul
作出解释单证。
您需要import functools
在Python 3+线。
Answer 3:
我会用numpy.prod
执行任务。 见下文。
import numpy as np
mylist = [1, 2, 3, 4, 5, 6]
result = np.prod(np.array(mylist))
Answer 4:
如果你想避免进口任何物件,避免Python中的更复杂的领域,你可以使用循环简单
product = 1 # Don't use 0 here, otherwise, you'll get zero
# because anything times zero will be zero.
list = [1, 2, 3]
for x in list:
product *= x
Answer 5:
我个人很喜欢这应该是一个泛型列表中的所有元素相乘,一个功能:
def multiply(n):
total = 1
for i in range(0, len(n)):
total *= n[i]
print total
它的结构紧凑,使用简单的东西(一个变量和一个for循环),感觉直观的给我(它看起来像我怎么会想到的问题,只取一个,由下一个相乘,再乘以,等等! )
Answer 6:
下面是我的机器的一些性能测量。 在这种情况下,相关的是在长时间运行的循环小投入进行:
import functools, operator, timeit
import numpy as np
def multiply_numpy(iterable):
return np.prod(np.array(iterable))
def multiply_functools(iterable):
return functools.reduce(operator.mul, iterable)
def multiply_manual(iterable):
prod = 1
for x in iterable:
prod *= x
return prod
sizesToTest = [5, 10, 100, 1000, 10000, 100000]
for size in sizesToTest:
data = [1] * size
timerNumpy = timeit.Timer(lambda: multiply_numpy(data))
timerFunctools = timeit.Timer(lambda: multiply_functools(data))
timerManual = timeit.Timer(lambda: multiply_manual(data))
repeats = int(5e6 / size)
resultNumpy = timerNumpy.timeit(repeats)
resultFunctools = timerFunctools.timeit(repeats)
resultManual = timerManual.timeit(repeats)
print(f'Input size: {size:>7d} Repeats: {repeats:>8d} Numpy: {resultNumpy:.3f}, Functools: {resultFunctools:.3f}, Manual: {resultManual:.3f}')
结果:
Input size: 5 Repeats: 1000000 Numpy: 4.670, Functools: 0.586, Manual: 0.459
Input size: 10 Repeats: 500000 Numpy: 2.443, Functools: 0.401, Manual: 0.321
Input size: 100 Repeats: 50000 Numpy: 0.505, Functools: 0.220, Manual: 0.197
Input size: 1000 Repeats: 5000 Numpy: 0.303, Functools: 0.207, Manual: 0.185
Input size: 10000 Repeats: 500 Numpy: 0.265, Functools: 0.194, Manual: 0.187
Input size: 100000 Repeats: 50 Numpy: 0.266, Functools: 0.198, Manual: 0.185
你可以看到,numpy的是较小的输入慢了不少,因为在执行乘法之前它分配一个数组。 此外,注意在NumPy的溢出。
Answer 7:
最简单的方法是:
import numpy as np
np.exp(np.log(your_array).sum())
Answer 8:
今天发现这个问题,但我注意到,它不具备的情况下有None
的在列表中。 因此,完整的解决方案是:
from functools import reduce
a = [None, 1, 2, 3, None, 4]
print(reduce(lambda x, y: (x if x else 1) * (y if y else 1), a))
另外的情况下,我们有:
print(reduce(lambda x, y: (x if x else 0) + (y if y else 0), a))
Answer 9:
nums = str(tuple([1,2,3]))
mul_nums = nums.replace(',','*')
print(eval(mul_nums))
Answer 10:
开始Python 3.8
,一个prod
作用已被列入到math
标准库模块:
math.prod(可迭代,*,开始= 1)
它返回的产物start
值(默认值:1)数量的时间可迭代:
import math
math.prod([1, 2, 3, 4, 5, 6]) # 720
注意,如果迭代是空的,这将产生1
(或start
值,如果提供)。
Answer 11:
我想这方式如下:
def product_list(p):
total =1 #critical step works for all list
for i in p:
total=total*i # this will ensure that each elements are multiplied by itself
return total
print product_list([2,3,4,2]) #should print 48
Answer 12:
这是我的代码:
def product_list(list_of_numbers):
xxx = 1
for x in list_of_numbers:
xxx = xxx*x
return xxx
print(product_list([1,2,3,4]))
结果:( '1 * 1 * 2 * 3 * 4',24)
Answer 13:
我的解决方案:
def multiply(numbers):
a = 1
for num in numbers:
a *= num
return a
pass
Answer 14:
如何使用递归?
def multiply(lst):
if len(lst) > 1:
return multiply(lst[:-1])* lst[-1]
else:
return lst[0]
Answer 15:
这是非常简单的不进口任何东西。 这是我的代码。 这将定义乘以列表中的所有项目,并返回他们的产品功能。
def myfunc(lst):
multi=1
for product in lst:
multi*=product
return product
文章来源: How can I multiply all items in a list together with Python?