Re: max(), sum(), next()



On Sep 3, 2:18 pm, Laszlo Nagy <gand...@xxxxxxxxxxxx> wrote:
bearophileH...@xxxxxxxxx wrote:
Empty Python lists [] don't know the type of the items it will
contain, so this sounds strange:

sum([])

0

Because that [] may be an empty sequence of someobject:

You are right in that sum could be used to sum arbitrary objects.
However, in 99.99% of the cases, you will be summing numerical values.
When adding real numbers, the neutral element is zero. ( X + 0 = X) It
is very logical to return zero for empty sequences.

No it isn't. Nothing is not 0, check with MS-Access, for instance:

Null + 1 returns Null. Any arithmetic expression involving a
Null evaluates to Null. Adding something to an unknown returns
an unknown, as it should.

It is a logical fallacy to equate unknown with 0.

For example, the water table elevation in ft above Mean Sea Level
is WTE = TopOfCasing - DepthToWater.

TopOfCasing is usually known and constant (until resurveyed).
But DepthToWater may or may not exist for a given event (well
may be covered with fire ants, for example).

Now, if you equate Null with 0, then the WTE calculation says
the water table elevation is flush with the top of the well,
falsely implying that the site is underwater.

And, since this particular site is on the Mississippi River,
it sometimes IS underwater, but this is NEVER determined by
water table elevations, which, due to the CORRECT treatment
of Nulls by Access, never returns FALSE calculations.

sum([])
0

is a bug, just as it's a bug in Excel to evaluate blank cells
as 0. It should return None or throw an exception like sum([None,1])
does.


Same way, if we would have a prod() function, it should return one for
empty sequences because X*1 = X. The neutral element for this operation
is one.

Of course this is not good for summing other types of objects. But how
clumsy would it be to use

sum( L +[0] )

or

if L:
value = sum(L)
else:
value = 0

instead of sum(L).

Once again, this is what sum() is used for in most cases, so this
behavior is the "expected" one.

Another argument to convince you: the sum() function in SQL for empty
row sets returns zero in most relational databases.

But of course it could have been implemented in a different way... I
believe that there have been excessive discussions about this decision,
and the current implementation is very good, if not the best.

Best,

Laszlo

.



Relevant Pages

  • Re: max(), sum(), next()
    ... You are right in that sum could be used to sum arbitrary objects. ... is very logical to return zero for empty sequences. ... Adding something to an unknown returns ...
    (comp.lang.python)
  • Re: max(), sum(), next()
    ... You are right in that sum could be used to sum arbitrary objects. ... Same way, if we would have a prodfunction, it should return one for empty sequences because X*1 = X. ... the sumfunction in SQL for empty row sets returns zero in most relational databases. ...
    (comp.lang.python)
  • Re: More or Less Than the Sum of Its Parts
    ... > More or Less Than the Sum of Its ... > is mostly water, ... > history has been other than the cumulative behavior ... > evident human behavior ...
    (sci.math)
  • Re: More or Less Than the Sum of Its Parts
    ... can only be the sum of its parts and the human body ... is mostly water, ... history has been other than the cumulative behavior ...
    (sci.math)
  • Re: NOVA on Emergence
    ... Rolf wrote, On 2007/07/09 05:54: ... always precisely the sum of its constituent parts. ... water, you know, the rest is almost negligible. ...
    (talk.origins)