I have a homogeneous list of objects with None, but it can contain any type of values. Example:
>>> l = [1, 3, 2, 5, 4, None, 7]
>>> sorted(l)
[None, 1, 2, 3, 4, 5, 7]
>>> sorted(l, reverse=True)
[7, 5, 4, 3, 2, 1, None]
Is there a way without reinventing the wheel to get the list sorted the usual python way, but with None values at the end of the list, like that:
[1, 2, 3, 4, 5, 7, None]
I feel like here can be some trick with "key" parameter
I created a function that expands on the answer by Andrew Clark and the comment by tutuDajuju.
Here is an example of how you can run it:
Try this:
Since infinity is larger than all integers,
None
will always be placed last.This constructs a tuple for each element in the list, if the value is
None
the tuple with be(True, None)
, if the value is anything else it will be(False, x)
(wherex
is the value). Since tuples are sorted item by item, this means that all non-None
elements will come first (sinceFalse < True
), and then be sorted by value.