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

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

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

Ответ 1

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

Оставьте его в этой форме, если это возможно.

Ответ 2

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

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

Ответ 4

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

Ответ 5

Этот обновленный пост от Peter Bengtsson предлагает два из самых быстрых способов составить список уникальных элементов в Python 3.6+:

# Unordered (hashable items)
list(set(seq))

# Order preserving
list(dict.fromkeys(seq))