On Fri, Apr 10, 2020 at 4:27 PM Elliott Dehnbostel <[email protected]>
wrote:

> *Consider the following trivial for-loop:*
>
> chars = "abcaaabkjzhbjacvb"
> seek = {'a','b','c'}
> count = 0for a in chars:
>      if a in seek:
>           count += 1
>
>
I would definitely not write it that way.  Instead I would write:

for a in chars:
    count += a in seek

Or quite likely simply:

count = sum(a in seek for a in chars)

Now your trivial example is ... well, trivial.  Often we  want to do
different things if the membership is or isn't satisfied.  Sometimes we can
simplify like this:

stuff = [this if a in seek else that for a in chars]

> count = sum([1 for a in chars if a in seek])
>
> This is kinda-sorta going in the right direction, but it has a bunch of
noise for no reason.  Booleans subclass ints, with True being a kind of 1
and False being a kind of 0.  We don't need to restate that in the
comprehension.  Also no need to build a separate if when you've already
stated the condition. Also, sum is perfectly happy (and ever so slightly
faster) dealing with a generator comprehension.

Neither the inline if nor your proposal deal with actual blocks:

for a in chars:
    if a in seek:
        do_this(a)
        and_that(a)
    else:
        other_stuff(a)
        still_more(a)

But neither do we actually need any shorter way to spell that, which is
already clear.

-- 
Keeping medicines from the bloodstreams of the sick; food
from the bellies of the hungry; books from the hands of the
uneducated; technology from the underdeveloped; and putting
advocates of freedom in prisons.  Intellectual property is
to the 21st century what the slave trade was to the 16th.
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/7JXTJGVCF5FFOXK4LDH6FHJ2HOJUY5YP/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to