Как исправить ошибку 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.