Как проверить является ли тип значения списка в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для проверки, является ли переменная списком в Python, следует применить функцию isinstance().

Python
Скопировать код
is_list = isinstance(my_var, list)  # Возвращает True, если my_var является списком
Кинга Идем в IT: пошаговый план для смены профессии

Когда и зачем используется isinstance()

Функция isinstance() служит для проверки типов объектов с учетом их наследования. Функция type(), в отличие от нее, такую возможность не предоставляет.

Python
Скопировать код
is_subclass = isinstance(object, classinfo)

Преимущества использования isinstance()

  1. С учетом подклассов: Функция корректно обрабатывает наследников и поддерживает полиморфность.
  2. Ясность: Способствует читаемости и интуитивности кода.
  3. Устойчивость к преобразованиям: Воспользовавшись isinstance(), можно избежать сложностей при последующих изменениях иерархии классов.

Предостережение

Нежелательно использовать имена встроенных типов в качестве имен своих переменных, дабы не создать путаницу.

Python
Скопировать код
list = [1, 2, 3]               # Сокрытие встроенного типа list
is_list = isinstance(list, list)  # Ошибка, исходный контекст типа потерян.

Определение подклассов

В Python часто создаются пользовательские классы, наследующие функциональность встроенного list. В этих случаях isinstance() также срабатывает корректно.

Python
Скопировать код
class MyList(list):      # Создан подкласс списка
    pass

custom_list = MyList()
is_list_instance = isinstance(custom_list, list) # Возвращает True, так как MyList является наследником list

Остерегайтесь поддельных списков

Тем не менее будьте бдительны, иногда объекты могут имитировать список, не будучи на самом деле списками.

Python
Скопировать код
class NotAList():          # Этот класс подражает списку
    def __iter__(self):
        ...

not_a_list = NotAList()  
is_not_a_list = isinstance(not_a_list, list)  # Возвращает False, поскольку это не список.

Применение typing.List

В Python версий старше 3.4 присутствует модуль typing, который предназначен для работы со сложными типами данных.

Python
Скопировать код
from typing import List

is_typing_list = isinstance(my_var, List)  # Проверка, является ли my_var типом из модуля typing

Визуализация

Вообразим, как Python определяет списки:

Python
Скопировать код
is_list = isinstance(some_var, list)

Можно визуализировать этот процесс как контроль при погрузке багажа:

           ✈️         ➡️  [ Чемодан, Чемодан, Рюкзак ]  ➡️  🛄
[some_var]           Сканер Типа           is_list?

Основная идея: Python с легкостью выполняет определение списков среди прочих типов данных вроде работника, обслуживающего багаж.

Чемодан   == Список?    ✅
Рюкзак    == Список?    ❌

Python каждый день помогает делать код более эффективным и изящным. 💼💼

Полезные материалы

  1. Официальная документация Python по спискам – Изучите весь спектр возможностей списков в Python.
  2. Обсуждение на Stack Overflow – type vs isinstance – Классическое обсуждение: "type" против "isinstance".
  3. Официальная документация Python – isinstance – Справочная информация по isinstance().
  4. Python Wiki о проверке типов – Все, что нужно знать о проверке типов в Python.
  5. Руководство по обработке ошибок в Python – Основные методы работы с ошибками.
  6. Учебник GeeksforGeeks – метод isinstance – Исчерпывающий гид по isinstance().
  7. Исходное обсуждение на Stack Overflow о проверке списков – Прочитайте первоисточник вопроса.