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
>>> l = [1, 3, 2, 5, 4, None, 7]
>>> sorted(l, key=lambda x: (x is None, x))
[1, 2, 3, 4, 5, 7, None]
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)
(where x
is the value). Since tuples are sorted item by item, this means that all non-None
elements will come first (since False < True
), and then be sorted by value.