Pythonic way to sum n-th list element?

Alex Martelli aleax at aleax.it
Sat Apr 19 04:13:25 EDT 2003


David Eppstein wrote:

> In article <C8_na.646$dP1.2863 at newsc.telia.net>,
>  "Tim Gahnström /Bladerman" <tim at bladerman.com> wrote:
> 
>> > What's wrong with:
>> >
>> > t = 0
>> > for y in x:
>> >      t += y[1]
>> >
>> > The extra variable?  The number of lines?
>> 
>> I am really curious about that to, I would most definitley say that this
>> is the most pythonic way. It is simple and easily readabel by anyone and
>> I am sure it is just as fast any of the other way.
> 
> If you want the sum of a list of items, you should write it in a way
> that looks like "the sum of a list of items", not in a way that looks

"The sum" is so frequently needed that I wouldn't mind at all if
Python singled it out as a built-in.  But "reduce(operator.add, ..."
just isn't a great way to express it, in my opinion (and yet as an
old APL'er, and FP-liker, I _should_ like it -- but I don't).

> like "loop over these items, maintain another variable t, perform a
> sequence of additions".  Why do we have high level languages if not to
> express our intentions at a higher level and let the language worry
> about what low-level operations are needed to implement it?

We use VHLL's to enhance our programming productivity.  There's no
*mandate* that each idiom MUST be very abstract and require higher
maths; on the contrary, Python thrives on simplicity and directness.

"sum([y[1] for y in x])" would be very simple and direct, IMHO; the
"same" thing expressed with "reduce(operator.add,[y[1] for y in x])"
may only feel "simple and direct" to PhD's in maths -- it feels
_abstruse_ to most people, in my opinion.

Python isn't about being abstruse.


Alex





More information about the Python-list mailing list