On Mon, Jan 7, 2019 at 3:19 PM David Mertz <me...@gnosis.cx> wrote:
>
> OK, let me be more precise.  Obviously if the implementation in a class is:
>
> class Foo:
>     def __lt__(self, other):
>         return random.random() < 0.5
>
>
> Then we aren't going to rely on much.
>
> * If comparison of any two items in a list (under __lt__) is deterministic, 
> is the resulting sort order deterministic? (Pretty sure this is a yes)

If you guarantee that exactly one of "x < y" and "y < x" is true for
any given pair of values from the list, and further guarantee that if
x < y and y < z then x < z, you have a total order. Without those two
guarantees, you could have deterministic comparisons (eg "nan < 5" is
always false, but so is "5 < nan"), but there's no way to truly put
the elements "in order". Defining __lt__ as "rock < paper", "paper <
scissors", "scissors < rock" means that you can't guarantee the sort
order, nor determinism.

Are those guarantees safe for your purposes? If so, sort() is, AIUI,
guaranteed to behave sanely.

ChrisA
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to