"Natural" use of cmp= in sort

Ian Kelly ian.g.kelly at gmail.com
Mon Nov 10 20:43:39 CET 2014

On Mon, Nov 10, 2014 at 12:19 PM, Peter Otten <__peter__ at web.de> wrote:
> I'm not sure this works. I tried:

Here's a simpler failure case.

>>> ineq = """f2 > f3
... f3 > f1"""

[Previously posted code elided]

>>> greater_thans
set([('f3', 'f1'), ('f2', 'f3')])
>>> sorted(all_f, cmp=lambda t1, t2: 0 if t1==t2 else
...             (1 if (t1, t2) not in greater_thans else -1))
['f1', 'f2', 'f3']

Note that the greater_thans set is missing the implication by
transitivity that f2 > f1, so the given cmp function would
inconsistently return -1 for both comparisons cmp('f1', 'f2') and
cmp('f2', 'f1').

More information about the Python-list mailing list