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

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

list(set([a,b,c,a]))
22
задан nihiser 15 July 2013 в 13:45
поделиться

4 ответа

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

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

23
ответ дан 29 November 2019 в 04:04
поделиться

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

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

26
ответ дан 29 November 2019 в 04:04
поделиться

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

0
ответ дан 29 November 2019 в 04:04
поделиться

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

3
ответ дан 29 November 2019 в 04:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: