[Python-ideas] Extremely weird itertools.permutations

David Mertz mertz at gnosis.cx
Sat Oct 12 07:38:19 CEST 2013


Hi Andrew,

I've sort of said as much in my last reply to Nick.  But maybe I can
clarify further.  I can imagine *someone* wanting a filtering of
permutations by either identify or equality.  Maybe, in fact, by other
comparisons also for generality.

This might suggest an API like the following:

  equal_perms = distinct_permutations(items, r, filter_by=operator.eq)
  ident_perms = distinct_permutations(items, r, filter_by=operator.is_)

Or even perhaps, in some use-case that isn't clear to me, e.g.

  start_same_perms = distinct_permutations(items, r, filter_by=lambda a,b:
a[0]==b[0])

Or perhaps more plausibly, some predicate that, e.g. tests if two returned
tuples are the same under case normalization of the strings within them.

I guess the argument then would be what the default value of 'filter_by'
might be... but that seems less important to me if there were an option to
pass a predicate as you liked.



On Fri, Oct 11, 2013 at 7:57 PM, Andrew Barnert <abarnert at yahoo.com> wrote:

> On Oct 11, 2013, at 19:48, David Mertz <mertz at gnosis.cx> wrote:
>
> > My feeling, however, is that if one were to trim down the results from a
> permutations-related function, it is more interesting to me to only
> eliminate IDENTICAL items, not to eliminate merely EQUAL ones.
>
> I agree with the rest of your message, but I still think you're wrong
> here. Anyone who is surprised by distinct_permutations((3.0, 3)) treating
> the two values the same would be equally surprised by {3.0, 3} having only
> one member. Or by groupby((3.0, 'a'), (3, 'b')) only having one group. And
> so on.
>
> In Python, sets, dict keys, groups, etc. work by ==. That was a choice
> that could have been made differently, but Python made that choice long
> ago, and has applied it completely consistently, and it would be very
> strange to choose differently in this case.




-- 
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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20131011/ef0a6fab/attachment.html>


More information about the Python-ideas mailing list