Если, как вы сказали в комментариях, подсписки, которые имеют одинаковые первые три элемента, всегда находятся рядом друг с другом (но список не обязательно отсортирован), вы можете использовать itertools.groupby
для группировки этих элементов и затем получить next
из каждой группы.
>>> from itertools import groupby
>>> lst_a = [[1,2,3,5], [1,2,3,7], [1,2,3,9], [1,2,6,8]]
>>> [next(g) for k, g in groupby(lst_a, key=lambda x: x[:3])]
[[1, 2, 3, 5], [1, 2, 6, 8]]
Или используйте представление списка с enumerate
и сравните текущий элемент с последним:
>>> [x for i, x in enumerate(lst_a) if i == 0 or lst_a[i-1][:3] != x[:3]]
[[1, 2, 3, 5], [1, 2, 6, 8]]
Это не требует импорта, но имхо при использовании groupby
гораздо понятнее, что должен делать код. Однако обратите внимание, что, в отличие от вашего метода, оба из них создадут новый отфильтрованный список вместо обновления / удаления из исходного списка.