Вики-сайт python говорит: "Тестирование членства с наборами и словарями много ж звездочка, O (1), чем поисковые последовательности, O (n). При тестировании «a in b», b должен быть набором или словарем, а не списком или кортежем ».
Я использовал наборы вместо списков, когда скорость важна в моем коде, но в последнее время я интересно, почему наборы намного быстрее, чем списки. Может ли кто-нибудь объяснить или указать мне на источник, который объяснил бы, что именно происходит за кулисами в python, чтобы сделать наборы быстрее?
В основном, Зависит от операции, Вы делаете †¦
*For, добавляющий элемент - тогда, набор doesn’t должен переместить любые данные и все, что это должно сделать, вычисляют значение хэш-функции и добавляют его к таблице. Для вставки списка тогда потенциально существуют данные, которые будут перемещены.
*For, удаляя элемент - весь, который должен сделать набор, удаляют запись хеша из хэш-таблицы, для списка, это потенциально должно переместить данные (в среднем 1/2 данных.
*For поиск (т.е. в операторе) - набор просто должен вычислить значение хэш-функции элемента данных, найти, что значение хэш-функции в хэш-таблице, и если это там - тогда бинго. Для списка поиск должен искать каждый объект в свою очередь - в среднем 1/2 всех условий в списке. Даже в течение многих 1000-х объектов набор будет намного более быстрым для поиска.