Использование any() с isinstance()
В этом шаге вы научитесь использовать функцию any() в сочетании с функцией isinstance() для проверки, содержит ли список хотя бы один элемент определенного типа. Это особенно полезно при работе со списками смешанного типа.
Функция any() возвращает True, если хотя бы один элемент итерируемого объекта (например, списка) является истинным. В противном случае она возвращает False. Функция isinstance() проверяет, является ли объект экземпляром указанного класса или типа.
Создадим Python-скрипт, чтобы продемонстрировать это. В редакторе VS Code создайте новый файл с именем any_isinstance.py в директории ~/project.
## Create a mixed-type list
my_list = [1, "hello", 3.14, True]
## Check if the list contains any integers
has_integer = any(isinstance(x, int) for x in my_list)
## Print the result
print("List contains an integer:", has_integer)
## Check if the list contains any strings
has_string = any(isinstance(x, str) for x in my_list)
## Print the result
print("List contains a string:", has_string)
## Check if the list contains any floats
has_float = any(isinstance(x, float) for x in my_list)
## Print the result
print("List contains a float:", has_float)
## Check if the list contains any booleans
has_bool = any(isinstance(x, bool) for x in my_list)
## Print the result
print("List contains a boolean:", has_bool)
Сохраните файл. Теперь выполните скрипт с помощью команды python в терминале:
python ~/project/any_isinstance.py
Вы должны увидеть следующий вывод:
List contains an integer: True
List contains a string: True
List contains a float: True
List contains a boolean: True
В этом примере мы использовали генераторное выражение (isinstance(x, int) for x in my_list) внутри функции any(). Это генераторное выражение возвращает True, если элемент x является экземпляром int, и False в противном случае. Затем функция any() проверяет, есть ли среди этих значений хотя бы одно True.
Изменим список, чтобы посмотреть, как изменится вывод. Замените первый элемент my_list на число с плавающей точкой:
## Create a mixed-type list
my_list = [1.0, "hello", 3.14, True]
## Check if the list contains any integers
has_integer = any(isinstance(x, int) for x in my_list)
## Print the result
print("List contains an integer:", has_integer)
## Check if the list contains any strings
has_string = any(isinstance(x, str) for x in my_list)
## Print the result
print("List contains a string:", has_string)
## Check if the list contains any floats
has_float = any(isinstance(x, float) for x in my_list)
## Print the result
print("List contains a float:", has_float)
## Check if the list contains any booleans
has_bool = any(isinstance(x, bool) for x in my_list)
## Print the result
print("List contains a boolean:", has_bool)
Сохраните файл и запустите его снова:
python ~/project/any_isinstance.py
Теперь вывод должен быть таким:
List contains an integer: False
List contains a string: True
List contains a float: True
List contains a boolean: True
Теперь список не содержит целых чисел, поэтому has_integer равно False.
Эта техника полезна для проверки содержимого списка или для выполнения различных действий в зависимости от типов элементов, присутствующих в списке.