Python排序列表最后为None

Nik*_*lub 34 python

我有一个同构的无对象列表,但它可以包含任何类型的值.例:

>>> 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]
Run Code Online (Sandbox Code Playgroud)

有没有办法没有重新发明轮子获取通常为python方式排序的列表,但列表末尾没有值,如下所示:

[1, 2, 3, 4, 5, 7, None]
Run Code Online (Sandbox Code Playgroud)

我觉得这里可以使用"key"参数进行一些技巧

And*_*ark 91

>>> l = [1, 3, 2, 5, 4, None, 7]
>>> sorted(l, key=lambda x: (x is None, x))
[1, 2, 3, 4, 5, 7, None]
Run Code Online (Sandbox Code Playgroud)

这为列表中的每个元素构造一个元组,如果值是None带有be的元组(True, None),如果值是其他任何元素(False, x)(x值在哪里).由于元组是逐项排序的,这意味着所有非None元素将首先(自False < True),然后按值排序.

  • 我喜欢这个解决方案,因为它适合所有类型的同质列表 (2认同)
  • 如果对此解决方案使用`reverse = True`,则在键中使用`x is not None`,否则首先返回所有None值. (2认同)
  • @tutuDajuju 如果您想按降序排序并且最后没有,则首先不需要包含 True 和 False 的元组。如原始问题所示,您可以简单地对 `[7, 5, 4, 3, 2, 1, None]` 执行 `sorted(l, reverse=True)`。 (2认同)
  • 如果对日期时间之类的内容进行排序,@tutuDajuju 是正确的。 (2认同)

Set*_*ton 16

试试这个:

sorted(l, key=lambda x: float('inf') if x is None else x)
Run Code Online (Sandbox Code Playgroud)

由于无穷大大于所有整数,None因此总是放在最后.

  • 如果列表包含无穷大或者列表是字符串列表,则此方法不起作用。 (4认同)