"Mensanator" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]
On Jun 6, 1:44 am, "Terry Reedy" <[EMAIL PROTECTED]> wrote:
> "Mensanator" <[EMAIL PROTECTED]> wrote in message
>
> news:[EMAIL PROTECTED]
> | On Jun 5, 10:42?pm, John Salerno <[EMAIL PROTECTED]> wrote:
> | > Is it possible to write a list comprehension for this so as to 
> produce
> a
> | > list of two-item tuples?
> | >
> | > base_scores = range(8, 19)
> | > score_costs = [0, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3]
> | > print zip(base_scores, score_costs)
> | >
> | > I can't think of how the structure of the list comprehension would 
> work
> | > in this case, because it seems to require iteration over two separate
> | > sequences to produce each item in the tuple.
>
> Which is exactly the purpose of zip, or its specialization enumerate!

Aren't you overlooking the fact that zip() truncates the output
to the shorter length iterable?
=========================
<message does not quote correctly>
<me> No.
=========================
And since the OP foolishly
hardcoded his range bounds, zip(base_scores,score_cost) will
silently return the wrong answer if the base_count list grows.
============
<me> So, to future proof his code he should better use 
zip(itertools.count(8), score_costs).  I consider this better than using 
enumerate to make the wrong pairing (with itertools.count(0)) and then 
correcting the mistake.
====================
Surely enumerate() wasn't added to Python with no intention of
ever being used.
========================
<me> Of course not, so why suggest that is was?
However, it was intended for the most common case when one wants to pair 
items with counts beginning with 0.
=================================
> Of course, enumerate(iterable) is just a facade over 
> zip(itertools.count(),
> iterable)

But if all I'm using itertools for is the count() function, why would
I go to the trouble of importing it when I can simply use enumerate()?
====================================
<me>I have no idea.  The purpose of enumerate is to be easy.
But it is not so easy when it gives the wrong pairings.
===================================
Is it a couple orders of magnitude faster?
=================================
<me> Perhaps you do not understand 'facade' - the front part or face of 
something that you see.  I was saying that enumerate is a face on a room 
containing zip and itertools.count, or the equivalent code thereof. 
Therefore, enumerate is an easy way to do a particular zip, not an 
alternative to zip.  And there should be no significant performance 
difference, certainly for long sequences which make the additional lookups 
irrelevant.

tjr




--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to