listcomprehension, add elements?
sjmachin at lexicon.net
Mon Jun 23 13:51:34 CEST 2008
On Jun 23, 9:16 pm, Maric Michaud <ma... at aristote.info> wrote:
> Le Monday 23 June 2008 11:39:44 Boris Borcic, vous avez écrit :
> > John Machin wrote:
> > > Instead of sum(a + b for a, b in zip(foo, bar))
> > > why not use sum(foo) + sum(bar)
> > > ?
> > or even sum(foo+bar) as may apply.
> Because some are better than others :
> sum(foo+bar) is the worst, it create a superfluous list of len(foo) + len(bar)
> sum(a + b for a, b in zip(foo, bar)), creates a list of max(len(foo),
> len(bar)) elements, in most cases it is the same as the former.
> This could have been corrected using itertools.izip.
> So the winner is sum(foo) + sum(bar), which does not create anything not
> But if the question is "how to build the list and sum up all elements in a
> efficient way for sequences of arbitrary length ", it's important to make it
> in the same iteration, so the most effective/clear, and so "pythonic", way to
> do this is (untested) :
> res, sum = , 0
Please use tot or total, not sum!
> for s in (a + b for a, b
> in zip(itertools.izip(xrange(1, 51),
Perhaps you should not have left zip() in there ...
> xrange(50, 0, -1)))):
> sum += s
Do you mean res.append(s) ?
I would have thought that it would have been better to create the list
and then sum it:
res = [a + b for a, b in itertools.izip(foo_iter, bar_iter)]
total = sum(res)
More information about the Python-list