? get negative from prod(x) when x is positive integers

Terry Reedy tjreedy at udel.edu
Fri Jun 28 11:30:35 EDT 2013


On 6/28/2013 10:38 AM, Vincent Davis wrote:
> I have a list of a list of integers. The lists are long so i cant really
> show an actual example of on of the lists, but I know that they contain
> only the integers 1,2,3,4. so for example.
> s2 = [[1,2,2,3,2,1,4,4],[2,4,3,2,3,1]]
>
> I am calculating the product, sum, max, min.... of each list in s2 but I
> get negative or 0 for the product for a lot of the lists. (I am doing
> this in ipython)

Based on Python2 (from print output). Look at the underlying version to 
make sure it is 2.7. Using Python 3 or something based on it is better 
unless you *really* have to use Python 2.

> for x in s2:
>      print('len = ', len(x), 'sum = ', sum(x), 'prod = ', prod(x), 'max
> = ', max(x), 'min = ', min(x))

prod is not a Python builtin. I am guessing ipython adds it as a C-coded 
builtin because a Python-coded function* would not have the overflow bug 
exhibited below. See for instance
https://en.wikipedia.org/wiki/Integer_overflow

Not having to worry about this, because Python comes with 
multi-precision integers, is a great thing about using Python rather 
than almost any other language.


* I do not remember it this was always true for old enough Pythons.

> ('len = ', 100, 'sum = ', 247, 'prod = ', 0, 'max = ', 4, 'min = ', 1)
> ('len = ', 100, 'sum = ', 230, 'prod = ', -4611686018427387904, 'max = ', 4, 'min = ', 1)

def prod(seq):
     res=1
     for i in seq:
         res *= i
     return res

should work for you.

-- 
Terry Jan Reedy




More information about the Python-list mailing list