Sort list while pushing None values to the end
list, nonetype, python, sorting
Solution
>>> 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.
Problem
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