Как исправить ошибку IndexError при сортировке списка списков разной длины подсписок

У меня есть следующий список:

expected_ans = [[3], [1],[2],[1,2,3],[1,3],[2,3], [1,2] ,[]]

Я пытаюсь упорядочить его элементы по первому элементу в подсписке следующим образом:

sorted(expected_ans, key=lambda x:x[-1])

Я получаю следующую ошибку:

  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
  IndexError: list index out of range

Я не уверен, что мне не хватает? Заранее благодарим за предложения.

2 ответа

Решение

Никакой индекс не будет работать с пустым списком, которым является последний подсписок в вашем списке примеров.

Вместо этого вы можете отсортировать по одному элементу каждого подсписка, который, в случае пустого подсписка, вернет пустой список в качестве ключа и поместит его перед возвращаемым списком:

sorted(expected_ans, key=lambda x: x[-1:])

Это возвращает:

[[], [1], [2], [1, 2], [3], [1, 2, 3], [1, 3], [2, 3]]

Прежде всего, вы сортируете по последнему элементу в каждом списке

Во-вторых, вы видите ошибку индекса потому, что последний список пуст. [ ][-1] вызовет IndexError, потому что нет элемента в позиции -1.

Другие вопросы по тегам