2010-03-26 2 views
21

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

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

Почему бы не сравнить их и выяснить? –

+9

Стреляйте, если вам нужно уникальное, зачем беспокоиться о возврате из набора? –

+0

2Chris: Итак, контрольные показатели ... 2Mike: Потому что список -> список –

ответ

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

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

+3

Вы можете перебирать множество и тестировать членство в наборах, поэтому преобразование обратно в список, если вам не нужен заказ, не нужно. –

+0

Быстро и ясно. Благодарю. –

+3

Стоит отметить, что это предполагает, что все элементы списка являются ** хешируемыми ** (см. Глоссарий [Pyhon glossary] (http://docs.python.org/glossary.html)) – Rodrigue

0

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

25

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

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

2

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

0

Это updated post Питера Бенгтссон предлагает два из самых быстрых способов сделать список уникальных элементов в Python 3.6 + является:

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

# Order preserving 
list(dict.fromkeys(seq)) 
Смежные вопросы