On Dec 26, 2019, at 14:13, Chris Angelico <ros...@gmail.com> wrote: > > On Fri, Dec 27, 2019 at 9:07 AM Andrew Barnert via Python-ideas > <python-ideas@python.org> wrote: >> >> You can very easily just write a key function that does this for you. In >> fact, you can write different key functions for different variations. >> >> For example, if you’re specifically sorting floats and want to shift nans to >> the right (even beyond inf): >> >> class shift_nan_to_end_key(float): >> def __lt__(self, other): >> return math.isnan(other) or not math.isnan(self) and >> float(self)<float(other) >> >> If you want to sort nans to the start, or deal with some other type with >> incomparable values, or do something more general with all pairs of >> incomparable values, you can just write a different key function. Whatever’s >> most appropriate for readability or type safety or performance for your >> particular use case, do that. > > You've created a key class, effectively equivalent to a cmp_to_key > form. Is there a flaw in this much simpler version? > > def nans_right(n): return math.isnan(n), n
No, I just thought being explicit would be clearer here. Seeing them both written out, I think you’re right, and all the extra boilerplate gets in the way much more than making you think through the (trivial) lexicographical compare does. And actually, where there is a difference, yours is usually better. For example, if you’re not sure the inputs will be floats, yours will raise in more cases than mine. (If you want to sort stringified floats out of a CSV or something, you probably want to say so explicitly, and I don’t think `nans_right` does say that.) But the fact that you can use whichever one you think is best for your case is certainly a nice feature of Python’s sorting API. :) _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/VZXQGCET5VTX2MAQWBSOIN6S4RY5UD4O/ Code of Conduct: http://python.org/psf/codeofconduct/