← Все вопросы

Что быстрее для проверки наличия — поиск в списке или в множестве?

Задан 20 месяцев назад1.3к просмотров3 ответа
21

Часто проверяю if x in collection. Заметил, что советуют для этого множество, а не список. Насколько реально разница большая и почему?

3 ответа

30
✓ Принятый ответ — помог автору

Разница огромная на больших данных. Поиск x in список — это O(n): Python идёт по элементам подряд, пока не найдёт. Поиск x in множестве (или среди ключей словаря) — в среднем O(1): он считает хеш x и прыгает сразу в нужную ячейку, не перебирая всё.

big_list = list(range(1_000_000))
big_set = set(big_list)

999_999 in big_list   # медленно: проходит почти весь список
999_999 in big_set    # мгновенно: один хеш-доступ

Практическое правило: если структура нужна в основном для проверок «есть/нет» и порядок/дубли не важны — храни в set. На паре десятков элементов разницы не почувствуешь, но на тысячах и больше — это разница между миллисекундами и секундами.

Олег Захаров переписал проверку с list на set, цикл стал летать 🔥 · 20 месяцев назад
10

В множестве — O(1) против O(n) у списка. Для частых проверок in всегда set.

4

В множестве.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект