Как использовать оператор in в Python?
Операторы “in” и “not in” в Python: проверка на принадлежность
Python’s in
и not in
операторы позволяют быстро определить, является ли заданное значение частью коллекции значений или нет. Этот тип проверки распространен в программировании и известен как “тест на принадлежность” в Python. Поэтому эти операторы известны как “операторы принадлежности”.
В этом руководстве вы узнаете, как:
- Выполнять тесты на принадлежность с использованием операторов
in
иnot in
- Использовать
in
иnot in
с различными типами данных - Работать с
operator.contains()
, эквивалентной функцией к операторуin
- Обеспечить поддержку
in
иnot in
в вашем собственном классе
Начало работы с тестами на принадлежность в Python
Иногда вам нужно определить, присутствует ли значение в коллекции значений или нет. Другими словами, вам нужно проверить, является ли заданное значение членом коллекции значений или нет. Этот тип проверки обычно известен как тест на принадлежность.
Рассмотрим следующую функцию is_member()
:
Чтобы продемонстрировать работу функции is_member()
, рассмотрим следующий пример использования:
В этом примере мы создаем список чисел [1, 2, 3, 4, 5]
и затем выполняем тест на принадлежность с помощью функции is_member()
. Мы проверяем, является ли число 3 членом списка чисел, и получаем ответ True
. Затем мы проверяем, является ли число 6 членом списка чисел, и получаем ответ False
.
Хотя функция is_member()
работает, она может быть неудобной для использования. В Python есть специальные операторы in
и not in
, которые делают проверку на принадлежность более простой и удобной.
Использование операторов in и not in с различными типами данных
Python предоставляет операторы in
и not in
, которые позволяют более удобно выполнять тесты на принадлежность. Эти операторы работают с различными типами данных, включая списки, кортежи, строки, генераторы, словари и множества.
Списки, кортежи и диапазоны
Списки, кортежи и диапазоны являются итерируемыми типами данных в Python, что означает, что вы можете выполнить итерацию по их элементам. Операторы in
и not in
позволяют вам проверить, находится ли заданное значение в списке, кортеже или диапазоне.
Рассмотрим следующий пример:
В этом примере мы создаем список numbers
[1, 2, 3, 4, 5]
, кортеж fruits
('apple', 'banana', 'cherry')
и диапазон от 1 до 6 r
. Затем мы используем операторы in
и not in
для проверки на принадлежность значениям в этих структурах данных. Мы проверяем, являются ли числа 3 и 6 членами списка numbers
, и получаем ответы True
и False
соответственно. Затем мы проверяем, являются ли слова “apple” и “orange” членами кортежа fruits
, и получаем ответы True
и False
соответственно. Наконец, мы проверяем, являются ли числа 3 и 6 членами диапазона r
, и получаем ответы True
и False
соответственно.
Операторы in
и not in
просты в использовании и позволяют вам легко проверять на принадлежность элементов списка, кортежа или диапазона.
Строки
Строки являются итерируемыми типами данных, поэтому операторы in
и not in
также работают с ними. Они позволяют вам проверить, содержит ли строка заданное подстроку или нет.
Рассмотрим следующий пример:
В этом примере мы определяем строку message
"Hello, world!"
. Затем мы используем операторы in
и not in
для проверки, содержит ли строка подстроки “Hello” и “Python”. Мы получаем ответы True
и False
соответственно.
Операторы in
и not in
могут быть полезными при поиске определенных слов или фраз в текстовых строках.
Генераторы
Генераторы в Python - это специальные объекты, которые создают элементы по мере необходимости, вместо того чтобы хранить их все сразу в памяти. Они также являются итерируемыми типами данных и поддерживают использование операторов in
и not in
.
Рассмотрим следующий пример:
В этом примере мы создаем генератор squares
, который генерирует квадраты чисел от 1 до 5. Затем мы используем операторы in
и not in
для проверки наличия чисел 9 и 6 среди сгенерированных значений. Мы получаем ответы True
и False
соответственно.
Операторы in
и not in
позволяют вам проверять наличие элементов в генераторах, не храня все значения в памяти.
Словари и множества
Словари и множества также являются итерируемыми типами данных в Python, но они имеют особенности в использовании операторов in
и not in
.
Словари
Когда вы используете оператор in
с словарем, он проверяет наличие ключа в словаре, а не его значений. Оператор not in
проверяет отсутствие ключа.
Рассмотрим следующий пример:
В этом примере мы создаем словарь student
со следующими ключами и значениями: “name” со значением “John”, “age” со значением 20 и “grade” со значением “A”. Затем мы используем операторы in
и not in
для проверки наличия ключей “name” и “score” в словаре student
. Мы получаем ответы True
и False
соответственно.
Оператор in
позволяет вам проверять наличие ключей в словаре, что может быть полезно при работе с данными.
Множества
Множества представляют собой наборы уникальных элементов в Python. Оператор in
работает с множествами и позволяет вам проверить наличие элемента в множестве.
Рассмотрим следующий пример:
В этом примере мы создаем множество colors
с элементами “red”, “green” и “blue”. Затем мы используем оператор in
для проверки наличия цветов “red” и “yellow” в множестве. Мы получаем ответы True
и False
соответственно.
Оператор in
позволяет вам быстро проверить, является ли элемент частью множества.
Применение операторов in и not in в действии
Операторы in
и not in
могут быть использованы для различных задач в Python. Рассмотрим некоторые примеры применения этих операторов.
Замена цепных операторов or
Возьмем, например, следующий код:
В этом примере мы использовали цепные операторы or
для проверки, входит ли оценка в диапазон от 70 до 100 включительно. Оператор or
позволяет выполнять проверку на принадлежность нескольких значений, но он может стать неудобным и сложным для чтения, особенно при большом количестве значений.
Оператор in
позволяет сделать эту проверку более удобной:
В этом примере мы используем оператор in
для проверки, входит ли оценка в диапазон от 70 до 100. Мы получаем тот же результат, что и в предыдущем примере, но при этом код становится более понятным и легким для чтения.
Написание эффективных тестов на принадлежность
При выполнении тестов на принадлежность в Python есть несколько способов сделать их более эффективными.
-
Используйте итерируемые типы данных с непостоянным временем выполнения доступа к элементам, такими как множества или генераторы. Это ускоряет проверку на принадлежность, особенно для больших коллекций.
-
Используйте функцию
operator.contains()
. Эта функция является эквивалентом оператораin
и может быть полезна, если вы хотите использовать результат проверки на принадлежность в других операциях.
Использование функции operator.contains() для тестов на принадлежность
Функция operator.contains()
предоставляет альтернативный способ выполнения тестов на принадлежность в Python. Она принимает два аргумента: контейнер и элемент. Функция возвращает True
, если элемент присутствует в контейнере, и False
в противном случае.
Рассмотрим следующий пример:
В этом примере мы импортируем модуль operator
и используем функцию operator.contains()
для выполнения тестов на принадлежность числам в списке numbers
. Мы получаем те же результаты, что и с использованием операторов in
и not in
.
Функция operator.contains()
может быть полезна, если вы хотите использовать результат проверки на принадлежность в других операциях или применить функциональный стиль программирования.
Поддержка тестов на принадлежность в пользовательских классах
Если вы создаете собственные классы в Python, вы можете добавить поддержку операторов in
и not in
с помощью специальных методов __contains__()
и __iter__()
.
Метод __contains__()
позволяет определить, входит ли заданный элемент в экземпляр вашего класса. Метод должен возвращать True
, если элемент принадлежит экземпляру класса, и False
в противном случае.
Метод __iter__()
должен возвращать итератор, используемый для итерации по элементам экземпляра класса. Это позволяет вашему классу быть итерируемым, что в свою очередь позволяет использовать оператор in
для проверки на принадлежность.
Рассмотрим следующий пример:
В этом примере мы создаем класс MyList
с методами __contains__()
и __iter__()
. Метод __contains__()
проверяет, входит ли заданный элемент в экземпляр класса, путем использования оператора in
. Метод __iter__()
возвращает итератор для итерации по элементам экземпляра класса. Затем мы создаем экземпляр класса MyList
с числами [1, 2, 3, 4, 5]
и выполняем тесты на принадлежность с использованием операторов in
и not in
.
Это позволяет вашему классу поддерживать операторы in
и not in
и использовать их для выполнения тестов на принадлежность.
Заключение
Python предоставляет удобные операторы in
и not in
, которые позволяют вам выполнять тесты на принадлежность различным типам данных. Эти операторы облегчают проверку, является ли заданное значение частью коллекции значений. Они работают с такими типами данных, как списки, кортежи, строки, генераторы, словари и множества. Операторы in
и not in
могут быть использованы для различных задач, включая замену цепных операторов or
, написание эффективных тестов на принадлежность, использование функции operator.contains()
и поддержку тестов на принадлежность в пользовательских классах.
Надеюсь, что этот руководство поможет вам лучше понять и использовать операторы in
и not in
в Python. Удачи с вашими проектами на Python!