我怎么能繁殖所有列表中的项目一起使用Python?(How can I multiply all i

2019-07-05 01:24发布

我需要编写一个函数,数的列表 ,并在一起相乘 。 例如: [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)

reduceoperator.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?