Как отсортировать список по ключу с элементами типа None? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть список, где некоторые элементы имеют тип None. Мне нужно отсортировать этот список, но я получаю эту ошибку, потому что 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 в конец списка?

РЕДАКТИРОВАТЬ: Спасибо за все ответы, и если список содержит строки вместо int?

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Вы можете управлять регистром 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)]
1 голос
/ 06 февраля 2020

Попробуйте это для своей ключевой функции:

import math

def takeSecond(elem):
  return elem[1] if elem[1] is not None else math.inf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...