Brad wrote:
On Jul 2, 8:17 pm, "Pablo Torres N." <tn.pa...@gmail.com> wrote:
This sounds like it belongs to the python-ideas list. I suggest
posting there for better feedback, since the core developers check
that list more often than this one.
I tried posting on python-ideas and received a "You are not allowed to
post to this mailing list" reply. Perhaps because I am posting through
Google groups? Or maybe one must be an approved member to post?
Spammers post thru Google groups
Either subscribe or access via news.gmane.org as gmane.comp.python.ideas.
As to your main question: this was discuss some years ago. There did not
seem enough use cases for 'bifilter' or 'distributor' to warrent
inclusion in the stdlib. Easy enough to do on one's own for those few
cases. Just filter twice.
Usually, one wants to do one thing or another to each item with the
original scan
for item in collection:
if pred(item):
proc_true(item)
else:
proc_false(item)
Having proc_true and proc_false both be append(item) is a special case.
Note that filter has been changed from returning a list to returning an
iterator. So a proposal for a function to return two lists would seem
backwards. A function that returns two iterators would be possible.
Something like itertools.tee except that each item would go on one tee
or the other instead of both. It would have two queues (deques) instead
of one. And it should be lazy -- items should only be pulled from the
original iterator when an item is requested from an empty queue.
I am not sure it is worth it. In the worst case, all items are say
'True' and you request 'False' items and all items get copied to the
True queue before the False iterator raised StopIteration.
The way to avoid calling keyfunc(item) twice on each item is to make a
new list first: newlist = list(map(keyfunc,iterable)). Then scan newlist
twice.
If you write such a function, first in Python, then C, you can register
code on PyPI and see how much interest it gets.
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list