如何将列表中的所有项目与Python相乘?

时间:2012-12-12 13:00:14

标签: python list multiplication

我需要编写一个需要的函数 列表的数字和加在一起。例: [1,2,3,4,5,6]会给我1*2*3*4*5*6。我真的可以帮到你。

17 个答案:

答案 0 :(得分:181)

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

答案 1 :(得分:154)

您可以使用:

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

请参阅reduceoperator.mul文档以获取解释。

你需要Python 3 +中的import functools行。

答案 2 :(得分:64)

我会使用numpy.prod来执行任务。见下文。

import numpy as np
mylist = [1, 2, 3, 4, 5, 6] 
result = np.prod(np.array(mylist))  

答案 3 :(得分:48)

如果您想避免导入任何内容并避免使用更复杂的Python区域,可以使用简单的for循环

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

答案 4 :(得分:8)

我个人喜欢这个函数,它将通用列表的所有元素相乘:

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

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

答案 5 :(得分:7)

这是我机器的一些性能测量。与在长时间运行的循环中对小输入执行此操作相关:

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的溢出。

答案 6 :(得分:6)

简单的方法是:

import React from 'react';
import {render} from 'react-dom';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
import {BrowserRouter} from 'react-router-dom';

render((
    <BrowserRouter>
        <App />
    </BrowserRouter>
), document.getElementById('root'));
registerServiceWorker();    

答案 7 :(得分:2)

今天发现了这个问题,但我注意到它没有列表中有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))

答案 8 :(得分:2)

nums = str(tuple([1,2,3]))
mul_nums = nums.replace(',','*')
print(eval(mul_nums))

答案 9 :(得分:2)

Python 3.8开始,prod函数已包含在标准库的math模块中:

  

math.prod(iterable,*,start = 1)

返回一个start值(默认值:1)乘以一个可迭代数字的乘积:

import math

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

请注意,如果iterable为空,则会产生1(或start值(如果提供))。

答案 10 :(得分:2)

Numpy具有prod函数,该函数返回列表的乘积,或者在这种情况下,返回列表的乘积,从技术上说,它返回给定轴上数组的乘积。

一种方式:

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

另一个只是在您的导入方式上起作用:

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

答案 11 :(得分:1)

我希望以下列方式:

    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

答案 12 :(得分:1)

这是我的代码:

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)

答案 13 :(得分:0)

我的解决方案:

def multiply(numbers):
    a = 1
    for num in numbers:
        a *= num
        return a

  pass

答案 14 :(得分:-1)

使用递归怎么样?

def multiply(lst):
    if len(lst) > 1:
        return multiply(lst[:-1])* lst[-1]
    else:
        return lst[0]

答案 15 :(得分:-1)

'''是理解逻辑的唯一简单方法 用于循环'''

Lap = [2,5,7,7,9] x = 1 对于我在膝上: x = i * x 打印(x)

答案 16 :(得分:-2)

很简单,不要导入任何东西。这是我的代码。 这将定义一个函数,该函数将列表中的所有项目相乘并返回其产品。

def myfunc(lst):
    multi=1
    for product in lst:
        multi*=product
    return product