Terry J. Reedy <[email protected]> added the comment:
You are right; the replacement index I called 'j' is better buried as a C index
or pointer within a slice replacement. In fact, a generator expression, if one
has a keep expression, or a filter call, if one has filter function, work,
without the intermediate list. Both also incorporate the keep scan
index/pointer in C. I verified that this works by defining 3 functions.
def fc(n, keep):
mylist = list(range(n))
mylist[:] = [x for x in mylist if keep(x)]
return mylist
def fg(n, keep):
mylist = list(range(n))
mylist[:] = (x for x in mylist if keep(x))
return mylist
def fl(n, keep):
mylist = list(range(n))
mylist[:] = filter(keep, mylist)
return mylist
I added a second test expression.
print(fc(i, keep) == fg(i, keep) == fl(i, keep) == expect)
at the 3 obvious places in the test loop above.
---
In the existing question about removing duplicates, the existing all-hashable
answer
mylist = list(set(mylist))
could be replaced by
mylist[:] = set(mylist)
----------
stage: patch review -> needs patch
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue41774>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com