[Python-ideas] Fwd: Extremely weird itertools.permutations

David Mertz mertz at gnosis.cx
Fri Oct 11 22:27:34 CEST 2013


Andrew & Neil (or whoever):

Is this *really* what you want:

>>> from itertools import permutations
>>> def nonredundant_permutations(seq):
...     return list(set(permutations(seq)))
...
>>> pprint(list(permutations([F(3,1), D(3.0), 3.0])))
[(Fraction(3, 1), Decimal('3'), 3.0),
 (Fraction(3, 1), 3.0, Decimal('3')),
 (Decimal('3'), Fraction(3, 1), 3.0),
 (Decimal('3'), 3.0, Fraction(3, 1)),
 (3.0, Fraction(3, 1), Decimal('3')),
 (3.0, Decimal('3'), Fraction(3, 1))]

>>> pprint(list(nonredundant_permutations([F(3,1), D(3.0), 3.0])))
[(Fraction(3, 1), Decimal('3'), 3.0)]

It seems odd to me to want that.  On the other hand, I provide a one-line
implementation of the desired behavior if anyone wants it.  Moreover, I
don't think the runtime behavior of my one-liner is particularly costly...
maybe not the best possible, but the best big-O possible.



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

> I think equality is perfectly reasonable here. The fact that {3.0, 3} only
> has one member seems like the obvious precedent to follow here.
>
> Sent from a random iPhone
>
> On Oct 11, 2013, at 13:02, David Mertz <mertz at gnosis.cx> wrote:
>
> What would you like this hypothetical function to output here:
>
> >>> from itertools import permutations
> >>> from decimal import Decimal as D
> >>> from fractions import Fraction as F
> >>> items = (3, 3.0, D(3), F(3,1), "aa", "AA".lower(), "a"+"a")
> >>> list(permutations(items))
>
> It's neither QUITE equality nor identity you are looking for, I think, in
> nonredundant_permutation():
>
> >> "aa" == "AA".lower(), "aa" is "AA".lower()
> (True, False)
> >>> "aa" == "a"+"a", "aa" is "a"+"a"
> (True, True)
> >>> D(3) == 3.0, D(3) is 3.0
> (True, False)
>
> On Fri, Oct 11, 2013 at 11:38 AM, Neil Girdhar <mistersheik at gmail.com>wrote:
>
>> "It is universally agreed that a list of n distinct symbols has n!
>> permutations. However, when the symbols are not distinct, the most common
>> convention, in mathematics and elsewhere, seems to be to count only
>> distinct permutations." —
>> http://stackoverflow.com/questions/6534430/why-does-pythons-itertools-permutations-contain-duplicates-when-the-original
>> .
>>
>>
>> Should we consider fixing itertools.permutations and to output only
>> unique permutations (if possible, although I realize that would break
>> code). It is completely non-obvious to have permutations returning
>> duplicates. For a non-breaking compromise what about adding a flag?
>>
>> Best,
>> Neil
>>
>> _______________________________________________
>> Python-ideas mailing list
>> Python-ideas at python.org
>> https://mail.python.org/mailman/listinfo/python-ideas
>>
>>
>
>
> --
> 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.
>
>
>
> --
> 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.
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
>
>


-- 
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/16f0a3ca/attachment.html>


More information about the Python-ideas mailing list