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

Ответ

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

1. С помощью set (порядок не сохраняется)

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

Почему это работает: Преобразование списка в set автоматически отбрасывает все дубликаты. Затем set преобразуется обратно в list.

original_list = [1, 4, 2, 2, 5, 4, 3]
unique_list = list(set(original_list))

print(unique_list) # Вывод может быть [1, 2, 3, 4, 5] (порядок не гарантирован)

2. С помощью dict.fromkeys() (порядок сохраняется)

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

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

original_list = [1, 4, 2, 2, 5, 4, 3]
unique_list = list(dict.fromkeys(original_list))

print(unique_list) # Вывод: [1, 4, 2, 5, 3]

Итог:

  • Для максимальной производительности без сохранения порядка используйте set().
  • Для сохранения порядка элементов используйте dict.fromkeys() (для Python 3.7+).

Ответ 18+ 🔞

Так, слушай, а вот есть у тебя список, а в нём одно и то же, как говна за баней, повторяется. Ну, дубликаты, блядь. И надо их убрать, чтобы чисто было. В Питоне, понятное дело, способов — овердохуища, но главное — порядок нужен или похуй?

Первый способ — через set (если порядок похуй, а скорость — огонь)

Вот смотри, если тебе всё равно, в каком порядке элементы будут валяться, то это твой вариант. Берёшь список, суёшь в set, а set, он такой хитрожопый, сам все повторы выкидывает. Потом обратно в список — и готово, чистота.

original_list = [1, 4, 2, 2, 5, 4, 3]
unique_list = list(set(original_list))

print(unique_list) # Может вывести [1, 2, 3, 4, 5] (порядок — как карта ляжет)

Второй способ — через dict.fromkeys() (если порядок священен и его надо сохранить)

А вот если тебе порядок важен, как последняя пачка сигарет в ларьке в три ночи, то тут уже сложнее. Но с Питоном 3.7 и выше словари стали умные — порядок вставки помнят. Берёшь, делаешь из списка словарь через dict.fromkeys(). Ключи в словаре уникальные, поэтому дубликаты нахуй слетают, а порядок остаётся, как был. Потом ключи обратно в список вытаскиваешь — и вот тебе красота.

original_list = [1, 4, 2, 2, 5, 4, 3]
unique_list = list(dict.fromkeys(original_list))

print(unique_list) # Вывод: [1, 4, 2, 5, 3] — всё на своих местах, блядь!

Итог, ёпта:

  • Если хочешь быстро и порядок не важен — set(), и не еби мозги.
  • Если порядок святее папы римского — dict.fromkeys() (для Питона 3.7+), и будет тебе счастье.