On 2020-04-10 5:21 p.m., Elliott Dehnbostel wrote:
Hello Everyone,

If I've done this incorrectly, please let me know so that I can improve/revise. I'm new to the Python community and quite enjoy the more functional features of Python 3, but have I have a peeve about it. I'd like to propose and discuss the following enhancement to Python 3:

Consider the following trivial for-loop:
```chars = "abcaaabkjzhbjacvb"
seek = {'a','b','c'}
count = 0
for a in chars:
if a in seek:
count += 1

```
`Gross. Twice nested for a simple count.`
`We could refactor the block like so:`
```chars = "abcaaabkjzhbjacvb"
seek = {'a','b','c'}
count = 0
for a in filter(lambda c: c in seek, chars): count += 1
Which is all well and good, but doesn't quite read like English. It's verbose, too.It also uses advanced concepts new programmers may not understand.```
`We could do this:`
```chars = "abcaaabkjzhbjacvb"
seek = {'a','b','c'}
count = sum([1 for a in chars if a in seek])However, this changes important semantics by creating an entire new list before summing.Also, adding just one more expression to the most nested block thwarts that refactor.I propose the following enhancement:```
```chars = "abcaaabkjzhbjacvb"
seek = {'a','b','c'}
count = 0
for a in chars if a in seek: count += 1```

fwiw you got pretty close to these there:

sum(1 for a in chars if a in seek) # is valid

for a in (a for a in chars if a in seek): count += 1 # is also valid (but ugly)

```What happened there?I've allowed a condition to follow the "for" construct without a colon or newline between.To be clear, this remains incorrect:chars = "abcaaabkjzhbjacvb"
seek = {'a','b','c'}
count = 0
for a in chars # No colon prior to the newline
if a in seek:
count += 1Value proposal:I assert that the inlined 'if' condition pattern is superior to the alternative refactors.Right now, the way to acquire an invariant in a more nasty loop would be:for a in iterable:
if condition:
continueBut this is messy and not particularly Pythonic.The filter approach uses concepts that should not be necessary for this task.The comprehension approach has different, undesirable semantics.Conclusion:I wanted to submit my thoughts here before getting too deep into this. Any input would be appreciated!Thanks everyone.

```

```_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-leave@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/A2PTKIJX5XY6Y2ZH7RAZJPGLFJDHTF5S/
Code of Conduct: http://python.org/psf/codeofconduct/
```