Рубрики
Без рубрики

Как удалить дубликаты из списка Python?

https://youtu.be/gxl23jfnk1y Вы знаете лучший способ удаления дубликатов из списка Python? Это популярный опрос кодирующего интервью в Google, Facebook и Amazon. В этой статье я покажу вам, как (а почему) это работает — так продолжай читать! Как удалить все дубликаты данного значения в списке? Наивный метод: Перейти … Как удалить дубликаты из списка Python? Прочитайте больше “

Автор оригинала: Chris.

Вы знаете лучший способ удаления дубликатов из списка Python? Это популярный опрос кодирующего интервью в Google, Facebook и Amazon. В этой статье я покажу вам, как (и почему) это работает – так что держите чтение!

Как удалить все дубликаты данного значения в списке?

Наивный метод : Перейдите на каждый элемент и проверьте, существует ли этот элемент в списке. Если это так, удалите его. Однако это требует нескольких строк кода.

Эффективный метод: Короче и более краткий способ состоит в том, чтобы создать словарь из элементов в списке, чтобы удалить все дубликаты и преобразовывать словарь обратно в список. Это сохраняет порядок исходных элементов списка.

lst = ['Alice', 'Bob', 'Bob', 1, 1, 1, 2, 3, 3]
print(list(dict.fromkeys(lst)))
# ['Alice', 'Bob', 1, 2, 3]
  1. Преобразуйте список в словарь с Dict.Fromkeys (LST) Отказ
  2. Преобразуйте словарь в список Список (Dict) Отказ

Каждый элемент списка становится новым ключом к словарю. Например, список [1, 2, 3] становится словарь {1: нет, 2: нет, 3: нет} Отказ Все элементы, которые происходят несколько раз, будут присвоены к тому же ключу. Таким образом, словарь содержит только уникальные ключевые ключи – не могут быть несколько равных клавиш.

В качестве значений словаря вы принимаете фиктивные значения (по умолчанию).

Затем вы преобразуете словарь обратно в список, выбрасывающие фиктивные значения.

Вот код:

>>> lst = [1, 1, 1, 3, 2, 5, 5, 2]
>>> dic = dict.fromkeys(lst)
>>> dic
{1: None, 3: None, 2: None, 5: None}
>>> duplicate_free = list(dic)
>>> duplicate_free
[1, 3, 2, 5]

Связанные статьи в блоге:

  • Python Удалить дубликаты из списка списков
  • Список Python Удалить
  • Окончательный гид по словари Python!

Словари Python сохраняют упорядочение ключа?

Как ни странно, Словары ключей в Python сохраняют порядок элементов Отказ Итак, да, порядок элементов сохраняется. (источник)

Это удивительно для многих читателей, потому что бесчисленные онлайн-ресурсы, такие как Это один утверждают, что порядок ключей словаря не сохранился. Они предполагают, что базовая реализация ключевых словарных ключей использует наборы и множества, хорошо известны, что агностики к упорядочению элементов. Но это предположение не так. Встроенная реализация словаря Python в Cpefhon сохраняет заказ.

Вот пример, не стесняйтесь создавать свои собственные примеры и тесты, чтобы проверить, сохраняется ли упорядочение.

lst = ['Alice', 'Bob', 'Bob', 1, 1, 1, 2, 3, 3]
dic = dict.fromkeys(lst)
print(dic)
# {'Alice': None, 'Bob': None, 1: None, 2: None, 3: None}

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

print(list(dic))
# ['Alice', 'Bob', 1, 2, 3]

Однако вы не можете полагаться на него, потому что любая реализация Python может, теоретически решать не сохранять порядок (обратите внимание, что «может» вот 100% теоретический и не распространяется на реализацию CPYPHON.

Если вам нужно уверены, что заказ сохраняется, вы можете использовать Заказанная библиотека словаря Отказ В CPYthon это просто обертка для реализации Dict Dict.

Альтернатива с установленным преобразованием

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

Наборы в Python позволяют только один экземпляр элемента. Поэтому, преобразуя список на набор, все дубликаты удаляются. В отличие от наивного подхода (проверка всех пар элементов, если они являются дубликатами), что имеет квадратичную сложность времени, этот метод имеет линейную сложность времени выполнения. Почему? Поскольку сложность выполнения создания набора является линейной в количестве установленных элементов. Теперь вы преобразуете установку обратно в список, и Voilà, дубликаты удаляются.

lst = list(range(10)) + list(range(10))
lst = list(set(lst))
print(lst)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Does this also work for tuples? Yes!

lst = [(10,5), (10,5), (5,10), (3,2), (3, 4)]
lst = list(set(lst))
print(lst)
# [(3, 4), (10, 5), (5, 10), (3, 2)]

Однако преобразование списка на набор не гарантирует сохранить порядок элементов списка. Набор теряет всю информацию заказа.

Метод линейного времени выполнения с установленным для удаления дубликатов из списка

Этот третий подход использует набор для проверки, если элемент уже находится в списке дубликатов. Поскольку проверка членства на наборах гораздо быстрее, чем проверка членства в списках, этот метод также имеет сложность линейной среды выполнения (он имеет постоянную сложность времени выполнения).

lst = [3, 3, 22, 22, 1]

dup_free = []
dup_free_set = set()
for x in lst:
    if x not in dup_free_set:
        dup_free.append(x)
        dup_free_set.add(x)

print(dup_free)

Такой подход удаления дубликатов из списка при сохранении порядка элементов также имеет линейную сложность времени выполнения. И это работает для всех языков программирования без необходимости знать подробности реализации о словаре в Python. Но, с другой стороны, это немного сложнее помнить.

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.