Самый быстрый способ uniqify списка в Python без сохранения порядка? Я видел много сложных решений в Интернете - они могут быть быстрее, чем просто:Самый быстрый способ унифицировать список в Python
list(set([a,b,c,a]))
Самый быстрый способ uniqify списка в Python без сохранения порядка? Я видел много сложных решений в Интернете - они могут быть быстрее, чем просто:Самый быстрый способ унифицировать список в Python
list(set([a,b,c,a]))
set([a, b, c, a])
Оставьте его в таком виде, если это возможно.
Вы можете перебирать множество и тестировать членство в наборах, поэтому преобразование обратно в список, если вам не нужен заказ, не нужно. –
Быстро и ясно. Благодарю. –
Стоит отметить, что это предполагает, что все элементы списка являются ** хешируемыми ** (см. Глоссарий [Pyhon glossary] (http://docs.python.org/glossary.html)) – Rodrigue
Отъезд this post с множеством разных результатов. То, что вы предложили выше, похоже, является одним из самых быстрых (и самых простых)
Переход в набор работает только для списков, так что все их позиции hashable - так, например. в вашем примере, если c = []
, код, который вы указали, вызовет исключение. Для не-хешируемых, но сопоставимых элементов сортировка списка, а затем использование itertools.groupby
для извлечения уникальных элементов из него - лучшее доступное решение (O (N log N)). Если элементы не являются ни хэшируемыми, ни сопоставимыми, ваше единственное решение «последнего канава» - O(N squared)
.
Вы можете закодировать функцию «uniquify» любой список, который использует лучший доступный подход, пытаясь каждый подход в порядке, с try
/except
вокруг первой и второй (и return
результата либо в конце статья try
, или, изящно, в предложении else
инструкции try
;-).
Тим Петерс написал классический общийcookbook recipe для этой проблемы еще в 2001 году (до того, как были введены комплекты). Комментарии Алекс Мартелл, Raymond Hettinger и др частностями являются информативными и включают в себя обновление, чтобы использовать наборы и т.д.
Это updated post Питера Бенгтссон предлагает два из самых быстрых способов сделать список уникальных элементов в Python 3.6 + является:
# Unordered (hashable items)
list(set(seq))
# Order preserving
list(dict.fromkeys(seq))
Почему бы не сравнить их и выяснить? –
Стреляйте, если вам нужно уникальное, зачем беспокоиться о возврате из набора? –
2Chris: Итак, контрольные показатели ... 2Mike: Потому что список -> список –