Мне нужно найти наиболее эффективный способ удаления дубликатов из списка в Python.
Я делаю это следующим образом:
for i in mj:
if i not in mj2:
mj2.append(i)
где kj
список похож, [2, 4, 4, 4, 4, 4, 9, 9]
а вывод mj2
имеет форму:
[2, 4, 9]
Есть более эффективный способ, который не включает циклы, так как мне приходится анализировать большие списки.
Самый простой — использовать
set()
:Если вы хотите сохранить порядок (поскольку
sets
это неупорядоченный список элементов), вы можете передать asort
в конце:Другой вариант, если ваш список изначально упорядочен и вы хотите сохранить порядок, вы можете использовать класс
OrderedDict
и использовать его для поддержания этого порядка:OrderedDict
представляет собой реализацию словарей, которая позволяет вам «запоминать» порядок, в котором были вставлены его элементы. Следовательно, вы можете использоватьfromkeys
метод словаря для использования элементов вmj
качестве ключей словаря, поскольку элементыmj
предварительно упорядочены, поэтому порядок сохраняется.Вы можете проверить производительность с помощью следующей строки кода:
хотя использование sorted может потреблять некоторый ресурс. Если у вас нет проблем с заказом, вы можете использовать его следующим образом:
Если исходный список очень большой и упорядоченный, гораздо эффективнее использовать
itetools.groupby
который создает итератор без создания новых списков:Можно получить первые элементы без обработки всего списка:
Для «групп» вы можете сделать это и так.