Как использовать и исправить проблему, когда python не включен?
Операторы “in” и “not in” в Python: проверка принадлежности
Python предоставляет операторы in
и not in
, которые позволяют быстро определить, является ли заданное значение частью коллекции значений или нет. Такая проверка, как правило, часто используется в программировании и называется тестом на принадлежность в Python. Поэтому эти операторы известны как операторы принадлежности.
В этом руководстве вы узнаете, как:
- Выполнять тесты на принадлежность с использованием операторов
in
иnot in
- Использовать
in
иnot in
с различными типами данных - Работать с
operator.contains()
, эквивалентной функцией для оператораin
- Предоставлять поддержку для
in
иnot in
в своих собственных классах
Начало работы с тестами на принадлежность в Python
Иногда вам нужно узнать, присутствует ли значение в коллекции значений или нет. Другими словами, вам нужно проверить, является ли заданное значение членом (элементом) коллекции значений или нет. Такая проверка обычно известна как тест на принадлежность.
Рассмотрим следующую функцию is_member()
:
Чтобы более ясно представить, как работает эта функция, рассмотрим пример использования:
В этом примере мы создаем список чисел и проверяем, является ли число 3 его членом. Функция is_member()
возвращает True
, потому что число 3 присутствует в списке. Затем мы проверяем, является ли число 6 членом списка. В этом случае функция is_member()
возвращает False
, потому что число 6 отсутствует в списке.
Хотя это решение работает, в Python есть более удобные способы выполнения тестов на принадлежность с помощью операторов in
и not in
. Давайте рассмотрим их подробнее.
Использование оператора “in” и “not in” с различными типами данных
Операторы in
и not in
в Python можно использовать с разными типами данных, включая списки, кортежи, диапазоны, строки, генераторы, словари и множества. Давайте рассмотрим каждый тип данных по отдельности.
Списки, кортежи и диапазоны
Списки, кортежи и диапазоны в Python являются итерируемыми объектами, что означает, что вы можете использовать операторы in
и not in
для проверки наличия конкретного значения в этих коллекциях.
Рассмотрим пример:
В этом примере мы создаем список чисел numbers
, кортеж гласных букв vowels
и диапазон чисел my_range
. Затем мы используем операторы in
и not in
для проверки наличия или отсутствия определенных значений в этих коллекциях. Результатом будет булево значение True
или False
.
Строки
Строки в Python также являются итерируемыми объектами, поэтому мы можем использовать операторы in
и not in
для поиска подстроки в строке.
Вот пример:
В этом примере мы задаем строку text
и используем операторы in
и not in
для проверки наличия или отсутствия подстроки в строке. Результатом будет булево значение True
или False
.
Генераторы
Генераторы в Python также являются итерируемыми объектами, поэтому мы можем использовать операторы in
и not in
для проверки наличия или отсутствия элемента в генераторе.
Вот пример:
В этом примере мы создаем генератор чисел numbers
и используем операторы in
и not in
для проверки наличия или отсутствия определенного числа в генераторе. Результатом будет булево значение True
или False
.
Словари и множества
Словари и множества в Python также поддерживают операторы in
и not in
. Однако, в случае словарей, операторы проверяют наличие или отсутствие ключа, а не значения.
Рассмотрим примеры:
В этом примере мы создаем словарь student_grades
с оценками для студентов и множество fruits
с названиями фруктов. Затем мы используем операторы in
и not in
для проверки наличия или отсутствия определенного ключа (студента или фрукта) в словаре или множестве. Результатом будет булево значение True
или False
.
Применение операторов “in” и “not in” в Python
Операторы in
и not in
можно применять не только для проверки принадлежности значений к коллекциям, но и для других целей, например, замены цепочек операторов или написания эффективных тестов на принадлежность.
Замена цепочек операторов
Иногда вам может понадобиться заменить цепочку операторов “или” (or
) при выполнении проверки принадлежности. Вместо того, чтобы написать условие вида value == item1 or value == item2 or value == item3
, вы можете использовать оператор in
для более компактной записи.
Рассмотрим пример:
В этом примере мы проверяем, является ли значение 3
членом списка numbers
. Результатом является булево значение True
.
Написание эффективных тестов на принадлежность
Использование операторов in
и not in
может помочь написать более эффективные тесты на принадлежность. Например, если у вас есть большая коллекция значений, вы можете использовать оператор in
или not in
, чтобы проверить, есть ли в ней заданное значение, вместо того, чтобы итерироваться по всей коллекции.
Рассмотрим пример:
В этом примере у нас есть диапазон чисел от 1 до 1000000, и мы проверяем, принадлежит ли число 500000
этому диапазону. Используя оператор in
, мы можем выполнить эту проверку за константное время, вместо того, чтобы итерироваться по всем значениям диапазона.
Использование функции operator.contains() для тестов на принадлежность
Если вам нужна более гибкая проверка на принадлежность, вы можете использовать функцию operator.contains()
. Эта функция является эквивалентом оператора in
.
Вот пример:
В этом примере мы импортируем модуль operator
и используем функцию operator.contains()
, чтобы проверить, является ли значение 3
членом списка numbers
. Результатом является булево значение True
.
Поддержка тестов на принадлежность в пользовательских классах
Если вы создаете собственные классы в Python, вы можете добавить поддержку для операторов in
и not in
, реализуя методы __contains__()
и __not_contains__()
соответственно.
Вот пример:
В этом примере мы создаем класс MyList
, который содержит атрибут data
и определяет методы __contains__()
и __not_contains__()
. Метод __contains__()
использует оператор in
, чтобы проверить, является ли значение членом атрибута data
, а метод __not_contains__()
использует оператор not in
. Оба метода возвращают булево значение.
Теперь мы можем использовать операторы in
и not in
с экземплярами класса MyList
:
В этом примере мы создаем экземпляр класса MyList
с атрибутом data
, содержащим список чисел. Затем мы используем операторы in
и not in
для проверки наличия или отсутствия определенного числа в экземпляре numbers
. Результатом будет булево значение True
или False
.
Заключение
В этом руководстве вы изучили, как использовать операторы in
и not in
для проверки наличия или отсутствия значения в коллекции. Вы также узнали, как использовать эти операторы с различными типами данных, в том числе со списками, кортежами, диапазонами, строками, генераторами, словарями и множествами. Кроме того, вы изучили, как заменить цепочки операторов и написать эффективные тесты на принадлежность с использованием операторов in
и not in
. Наконец, вы узнали, как предоставлять поддержку для операторов in
и not in
в своих собственных классах с помощью методов __contains__()
и __not_contains__()
.