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 ain chars: if ain 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 ain filter(lambda c: cin 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 ain charsif ain 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 ain charsif ain 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 newlineifa inseek:count +=1 *Value 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 ain iterable: if condition: continue But 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/A2PTKI... Code of Conduct: http://python.org/psf/codeofconduct/