On Sep 21, 2019, at 01:03, 보성 최 <cbs...@gmail.com> wrote: > > How about allowing to create multiple items for each loop in comprehension? > I'm not sure this grammar is available, though. > > for example: > > [loop for set] > s = set() > for i in range(10): > s.add(i) > s.add(i * 10) > [current comprehension] > s = { > x > for i in range(10) > for x in (i, i * 10) > }
Is there a reason it has to be a single comprehension? I think this would be a lot more readable: s = {x for x in range(10)} | {x*10 for x in range(10)} This doesn’t work as well for list comprehensions, or generator expressions, but it’s still not too horrible with a trivial interleave (flattened-zip) function: it = interleave((x for x in range(10)), (x*10 for x in range(10))) Which brings up another possibility: just build tuples and flatten: s = set(flatten((x, x*10) for x in range(10)) If you want, you could even make that a single flatten-and-setify function: def fset(It): return { x for tup in it for x in tup } s = fset((x, x*10) for x in range(10)) That’s still not quite as readable as your suggestion, but it’s not that bad, and it’s already available. > [suggested comprehension] > s = { > i, i * 10 > for i in range(10) > } I think you could find a way to make this not ambiguous as far as the parser is concerned, but it might be confusing for human readers. Remember that you can have a tuple as the yield expression, or you could have i as one element and a generator expression as the second, and possibly other things. I think all such other things would require an extra set of parens in every possible case, so the parser doesn’t have to do any extra look ahead or anything, but I think most humans don’t internalize the exact rules for when tuples do and don’t require parens, etc. _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/5MT6CA6ZXRUIEWN6SQ7KCZZV7UZDZOQO/ Code of Conduct: http://python.org/psf/codeofconduct/