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

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

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

4 Solutions collect form web for “Самый быстрый способ унифицировать список в Python”

 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 и др. Являются информативными и включают обновление для использования наборов и т. Д.

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

  • Список Python - True / False первые два элемента?
  • У списков Python есть эквивалент dict.get?
  • TypeError: int не может быть вызвано
  • Как урезать список в Python
  • Добавьте numpy.array к определенному numpy.array, сохраненному в списке
  • как проверить, существует ли элемент в списке списков python
  • как объединить два подсписок, разделяющих какое-то общее число?
  • Подведение итогов 2-го списка в списке списков списков
  • Python - лучший язык программирования в мире.