Ответ
В Python есть несколько способов получить уникальные значения из списка, каждый со своими особенностями.
Основные методы:
-
Использование
set()(самый быстрый, но порядок не сохраняется):my_list = [1, 2, 2, 3, 4, 4] unique_list = list(set(my_list)) # Результат: [1, 2, 3, 4] (порядок может быть любым) -
Использование
dict.fromkeys()(сохраняет порядок, Python 3.7+):my_list = [1, 2, 2, 3, 4, 4] unique_list = list(dict.fromkeys(my_list)) # Результат: [1, 2, 3, 4] (порядок сохранён) -
Использование
collections.OrderedDict(сохраняет порядок для старых версий Python):from collections import OrderedDict my_list = [1, 2, 2, 3, 4, 4] unique_list = list(OrderedDict.fromkeys(my_list)) -
Использование цикла (понятный, но менее эффективный):
my_list = [1, 2, 2, 3, 4, 4] unique_list = [] for item in my_list: if item not in unique_list: unique_list.append(item)
Ключевые различия:
set()— самый производительный, но не гарантирует порядок элементов.dict.fromkeys()— оптимальный выбор для Python 3.7+, так как сочетает хорошую производительность и сохранение порядка вставки.- Цикл с проверкой — самый медленный для больших списков из-за сложности O(n²).
В контексте SQL аналогичная операция выполняется с помощью ключевого слова DISTINCT в запросе SELECT.
Ответ 18+ 🔞
А, слушай, про уникальные значения в списках на Python! Ну, тут, блядь, как в жизни — вариантов дохуя, но все они с подвохом, ёпта.
Вот представь, у тебя список, как мешок с картошкой, а там одна и та же хрень повторяется. Надо отсеять эту муть. И способов — как говна за баней.
Основные приёмы, сука:
-
Через
set()— быстрее всех, но порядок накрывается медным тазом.my_list = [1, 2, 2, 3, 4, 4] unique_list = list(set(my_list)) # Может выдать [4, 1, 3, 2] — полный пиздец с порядком.Это как взорвать мешок динамитом — картошка вся вылетит, но хрен поймёшь, какая откуда. Зато быстро, ебать!
-
Через
dict.fromkeys()— хитрая жопа, порядок сохраняет (если Python 3.7 и новее).my_list = [1, 2, 2, 3, 4, 4] unique_list = list(dict.fromkeys(my_list)) # Выдаст [1, 2, 3, 4] — всё на своих местах, красота!Работает потому, что ключи в словаре уникальные, ёпта. Умно, блядь.
-
Через
collections.OrderedDict— для дедов, которые на Python 3.6 и старше сидят.from collections import OrderedDict my_list = [1, 2, 2, 3, 4, 4] unique_list = list(OrderedDict.fromkeys(my_list))То же самое, но для старых версий, где обычный словарь мог порядок перепутать. Архаизм, но работает.
-
Тупой цикл — понятно, но медленно, как ебнешься.
my_list = [1, 2, 2, 3, 4, 4] unique_list = [] for item in my_list: if item not in unique_list: unique_list.append(item)Это если ты совсем даун и хочешь всё контролировать. Для маленьких списков сойдёт, а для больших — терпения ноль ебать, будет тормозить, как черепаха в сиропе.
Короче, суть:
set()— скорость овердохуища, но порядок — хуй с горы. Если тебе похуй на последовательность — твой выбор.dict.fromkeys()— золотая середина. И быстро, и порядок не ебёт. Для современного Питона — то, что надо.- Цикл — это для учебников или для случаев, когда мозгов не хватило на первые два способа. Сложность у него O(n²), то есть на больших данных он просто сдохнет.
А в SQL, кстати, аналогичная фигня делается через DISTINCT в запросе. Типа SELECT DISTINCT column_name FROM table_name;. Там уже база данных сама голову ломает, как это оптимизировать, а не ты.