[Python-Dev] zip() and list-comprehension with commas
Ka-Ping Yee
Ka-Ping Yee <pingster@ilm.com>
Tue, 11 Jul 2000 18:05:10 -0700 (PDT)
On Tue, 11 Jul 2000, Paul Prescod wrote:
>
> Parallel iteration and list comprehensions are separate. I do prefer a
> parallel() (merge?) builtin to the semicolon syntax, myself. You could
> even define xparallel which is the lazy version (as in xrange).
I like this idea. This whole parallel iteration thing could be solved
with a single built-in and no syntax changes.
for x, y in parallel([10, 20, 30], [1, 2]):
Or "zip", since you're zipping the lists together (i foresee potential
geometric or concurrency-related interpretations of "parallel"):
for x, y in zip([10, 20, 30], [1, 2]):
[(x, y+z), for (x, y) in zip((1, 2, 3, 4, 5, 6), "abc"), for z in "de"]
Taking this all together provides one coherent solution:
- zip() built-in produces a lazy list-zipper object
- list-comps are written [<expr>, <clause>, <clause>, ...]
where each <clause> is "for x in y" or "if z"
Advantages:
- no semicolons; semicolons remain solely statement separators
- no possible confusion between parallel and nested iteration
- comma remains the top-level separator within lists, so
grouping of list-comp clauses is clear
- dict-comp is possible and straightforward if we really want it
- looks much prettier than map/lambda :)
How's that for a serious proposal?
-- ?!ng