我有一个列表,其中某些元素为None类型。我需要对这个列表进行排序,但是我收到此错误,因为显然没有一个不能排序。
Traceback (most recent call last):
File "<stdin>", line 9, in <module>
random.sort(key=takeSecond)
TypeError: unorderable types: int() < NoneType()
这是一个示例程序:
# take second element for sort
def takeSecond(elem):
return elem[1]
# random list
random = [(2, None), (3, 4), (4, 1), (1, 3)]
# sort list with key
random.sort(key=takeSecond)
# print list
print('Sorted list:', random)
如何解决此问题,对其他元素进行排序,也许将None
类型放在列表的末尾?
您可以通过为它分配一个高值,例如float('inf')
,来管理无的情况。
>>> lst = [(2, None), (3, 4), (4, 1), (1, 3)]
>>> lst.sort(key=lambda x:x[1] if x[1] is not None else float('inf'))
>>> lst
[(4, 1), (1, 3), (3, 4), (2, None)]
您可以检查功能是否为无
import sys
# take second element for sort
def takeSecond(elem):
if elem[1] is None:
return sys.maxsize # max int size
return elem[1]
# random list
random = [(2, None), (3, 4), (4, 1), (1, 3)]
# sort list with key
random.sort(key=takeSecond)
# print list
print('Sorted list:', random)
结果:
Sorted list: [(4, 1), (1, 3), (3, 4), (2, None)]
尝试使用此键来完成关键功能:
import math
def takeSecond(elem):
return elem[1] if elem[1] is not None else math.inf