## Returning the product of a list

Is there a more concise, efficient or simply pythonic way to do the following?

def product(list): p = 1 for i in list: p *= i return p

EDIT:

I actually find that this is marginally faster than using operator.mul:

from operator import mul # from functools import reduce # python3 compatibility def with_lambda(list): reduce(lambda x, y: x * y, list) def without_lambda(list): reduce(mul, list) def forloop(list): r = 1 for x in list: r *= x return r import timeit a = range(50) b = range(1,50)#no zero t = timeit.Timer("with_lambda(a)", "from __main__ import with_lambda,a") print("with lambda:", t.timeit()) t = timeit.Timer("without_lambda(a)", "from __main__ import without_lambda,a") print("without lambda:", t.timeit()) t = timeit.Timer("forloop(a)", "from __main__ import forloop,a") print("for loop:", t.timeit()) t = timeit.Timer("with_lambda(b)", "from __main__ import with_lambda,b") print("with lambda (no 0):", t.timeit()) t = timeit.Timer("without_lambda(b)", "from __main__ import without_lambda,b") print("without lambda (no 0):", t.timeit()) t = timeit.Timer("forloop(b)", "from __main__ import forloop,b") print("for loop (no 0):", t.timeit())

gives me

('with lambda:', 17.755449056625366) ('without lambda:', 8.2084708213806152) ('for loop:', 7.4836349487304688) ('with lambda (no 0):', 22.570688009262085) ('without lambda (no 0):', 12.472226858139038) ('for loop (no 0):', 11.04065990447998)

Without using lambda:

from operator import mul reduce(mul, list, 1)

it is better and faster. With python 2.7.5

from operator import mul import numpy as np import numexpr as ne # from functools import reduce # python3 compatibility a = range(1, 101) %timeit reduce(lambda x, y: x * y, a) # (1) %timeit reduce(mul, a) # (2) %timeit np.prod(a) # (3) %timeit ne.evaluate("prod(a)") # (4)

In the following configuration:

a = range(1, 101) # A a = np.array(a) # B a = np.arange(1, 1e4, dtype=int) #C a = np.arange(1, 1e5, dtype=float) #D

Results with python 2.7.5

| 1 | 2 | 3 | 4 | -------+-----------+-----------+-----------+-----------+ A 20.8 µs 13.3 µs 22.6 µs 39.6 µs B 106 µs 95.3 µs 5.92 µs 26.1 µs C 4.34 ms 3.51 ms 16.7 µs 38.9 µs D 46.6 ms 38.5 ms 180 µs 216 µs

Result: `np.prod`

is the fastest one, if you use `np.array`

as data structure (18x for small array, 250x for large array)

with python 3.3.2:

| 1 | 2 | 3 | 4 | -------+-----------+-----------+-----------+-----------+ A 23.6 µs 12.3 µs 68.6 µs 84.9 µs B 133 µs 107 µs 7.42 µs 27.5 µs C 4.79 ms 3.74 ms 18.6 µs 40.9 µs D 48.4 ms 36.8 ms 187 µs 214 µs

Is python 3 slower?

**Python,** Method 1: Traversal. Initialize the value of product to 1(not 0 as 0 multiplied with anything returns zero). Traverse till the end of the list, multiply every number with public List<var> ListOfProducts(string subcategory) { var products = (from p in dataContext.Products join s in dataContext.SubCategories.Where(x => x.SubCatName == subcategory) on p.SubcatId equals s.SubCatId join b in dataContext.Brands on p.BrandId equals b.BrandId select new { Subcategory = s.SubCatName, Brand = b.BrandName, p.ProductName,

reduce(lambda x, y: x * y, list, 1)

**Program for product of array,** C program to find product of array. // elements. #include <stdio.h>. int product( int ar[], int n). {. int result = 1;. for ( int i = 0; i < n; i++). result = result * ar[i];. return Here is how to write a method that gives the product of the elements of a list: import functools import operator def product(seq): """Product of a sequence.""" return functools.reduce(operator.mul, seq, 1)

if you just have numbers in your list:

from numpy import prod prod(list)

*EDIT*: as pointed out by @off99555 this does not work for large integer results in which case it returns a result of type `numpy.int64`

while Ian Clelland's solution based on `operator.mul`

and `reduce`

works for large integer results because it returns `long`

.

**Python Exercise: Multiply all the numbers in a list,** def multiply(numbers): total = 1 for x in numbers: total *= x return total print(multiply((8, 2, 3, -1, 7))). Sample Output: -336. Pictorial presentation:. Formulae that return a result in to two or more cells (there are various formulae that will do this including MINVERSE(), LINEST() and TRANSPOSE()). These types of array formulas return an array of values as their result and are referred to as multi-cell array formulae .

import operator reduce(operator.mul, list, 1)

**Python: Compute the product of a list of integers,** Returns the least common multiple of a list of numbers. Example: from functools import reduce from math import gcd def tips_lcm(nums): return In retail, a product return is the process of a customer taking previously purchased merchandise back to the retailer, and in turn receiving a refund in the original form of payment, exchange for another item (identical or different), or a store credit.

Well if you really wanted to make it one line without importing anything you could do:

eval('*'.join(str(item) for item in list))

But don't.

**Sum and product of an array,** function Product(Item : Int_Array) return Integer is compute(sum, product, list(2, 3, 5, 7, 11, 13, 17, 19)); the results are returned in sum and product % The product, a numeric (of type "double") or complex vector of length one. NB: the product of an empty set is one, by definition. S4 methods. This is part of the S4 Summary group generic. Methods for it must use the signature x, , na.rm. References. Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

**[Challenge] Product of Everything Else,** num_array[i]: product *= n product_list.append(product) #add product to the product_list list product = 1 #restart the product variable return Return the length (the number of items) of an object. The argument may be a sequence (such as a string, bytes, tuple, list, or range) or a collection (such as a dictionary, set, or frozen set).

**Visual Basic for AVCE,** to the list of products bought by the current customer that are displayed in the Return product combo box • Enables the Print receipt command button Returning Return a list of all products that are low in inventory (where the inventory in stock is less than 10) and need to be reordered, sorted by the category name and then sorted by product name. Return a list of all category names and category ID, sorted by category ID. Only return the category name and ID values.

**Most Efficient Way to Calculate the Product of All Items in a List ,** Say that I have a list of returns on a financial asset over time and want to know the total compounded return. To get the answer, I need to add 1 to Products purchased at a Costco location need to be returned at the returns counter at any Costco warehouse. Items ordered online can be returned at any Costco warehouse -or- you can initiate a return through Costco.com. Accepted payment methods differ online and in the warehouse. Please click here for a complete list of accepted payments.