如何使用无类型元素按键对列表进行排序?

问题描述 投票:1回答:3

我有一个列表,其中某些元素为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类型放在列表的末尾?

python python-3.x list sorting
3个回答
1
投票

您可以通过为它分配一个高值,例如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)]

0
投票

您可以检查功能是否为无

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)]

0
投票

尝试使用此键来完成关键功能:

import math

def takeSecond(elem):
  return elem[1] if elem[1] is not None else math.inf
© www.soinside.com 2019 - 2024. All rights reserved.