Ответ 1
Это зависит от правой руки операнда:
Операторы
in
иnot in
проверяют членство в коллекции. [...] Тест на членство в коллекции традиционно связан с последовательностями; объект является членом коллекции, если коллекция является последовательностью и содержит элемент, равный этому объекту. Однако для многих других типов объектов имеет смысл поддерживать тесты на членство без последовательности. В частности, словари (для ключей) и множества поддерживают тестирование членства.
Классы могут реализовать специальный метод __contains__
для переопределения поведения по умолчанию (итерации по последовательности) и, таким образом, могут предоставить больше (или менее) эффективный способ тестирования членства, чем сравнение каждого элемента контейнера.
Операторы тестирования членства (
in
иnot in
) обычно реализуются как итерация через последовательность. Однако объекты контейнера могут предоставить следующий специальный метод с более эффективной реализацией, что также не требует, чтобы объект был последовательностью.
Поскольку у вас есть список в вашем примере, он повторяется и каждый элемент сравнивается до тех пор, пока не будет найдено совпадение или список не будет исчерпан. Сложность времени обычно O(n)
.