Самый быстрый путь к uniqify список в Python, не сохраняя порядок? Я видел, что много сложных решений в Интернете - могли они быть быстрее, чем просто:
list(set([a,b,c,a]))
set([a, b, c, a])
Если возможно, оставьте его в таком виде.
Переход к набору работает только для списков, все элементы которых хешируются - например, в вашем примере, если c = []
, введенный вами код вызовет исключение. Для нехешируемых, но сопоставимых элементов наилучшим доступным решением является сортировка списка с последующим использованием itertools.groupby
для извлечения из него уникальных элементов (O (N log N)). Если ни все элементы хешируемы, ни все сопоставимы, единственное «последнее решение» - O (N в квадрате)
.
Вы можете закодировать функцию для «унификации» любого списка, который использует наилучший доступный подход, попробовав каждый подход по порядку, с попыткой
/ , кроме
вокруг первого и второго ( и return
результата либо в конце предложения try
, либо, что элегантно, в предложении else
предложения try
утверждение;-).
Посмотрите этот пост с множеством разных результатов. То, что вы предложили выше, кажется одним из самых быстрых (и самых простых)
Тим Петерс написал классический общий рецепт для этой задачи еще в 2001 году (до того, как были введены наборы). Комментарии Алекса Мартелли, Раймонда Хеттингера и других носят информативный характер и включают обновление для использования наборов и т. Д.