Самый быстрый способ унифицировать список в Python

Самый быстрый способ унифицировать список в Python без сохранения порядка? Я видел много сложных решений в Интернете – они могли бы быть быстрее, чем просто:

list(set([a,b,c,a])) 

 set([a, b, c, a]) 

Оставьте его в таком виде, если это возможно.

Переход к набору работает только для списков, так что все их элементы хешируются – так, например, в вашем примере, если c = [] , код, который вы укажете, вызовет исключение. Для не-хэшируемых, но сопоставимых элементов сортировка списка, а затем использование itertools.groupby для извлечения уникальных элементов из него – лучшее доступное решение (O (N log N)). Если элементы не являются ни хэшируемыми, ни сопоставимыми, ваше единственное решение «последнего канава» – это O(N squared) .

Вы можете запрограммировать функцию «uniquify» любого списка, который использует наилучший доступный подход, пытаясь каждый подход в порядке, с try / except вокруг первого и второго (и return результата либо в конце предложения try , или, элегантно, в предложении else заявления try ;-).

Тим Петерс написал классический рецепт поваренной книги для этой проблемы еще в 2001 году (до введения наборов). Комментарии Alex Martelli, Raymond Hettinger и др. Являются информативными и включают обновление для использования наборов и т. Д.

Проверьте это сообщение с множеством разных результатов. То, что вы предложили выше, похоже, является одним из самых быстрых (и самых простых)