Рубрики
Без рубрики

Python: Проверьте, является ли переменная списком

В этом уроке мы рассмотрим, как проверить, является ли переменная списком в Python. Мы будем использовать функции type() и isinstance (), а также оператор is.

Автор оригинала: Daniel Pimeh.

Python: Проверьте, является ли переменная списком

Вступление

Python-это динамически типизированный язык, и переменные типы данных выводятся без явного вмешательства разработчика.

Если бы у нас был код, который нуждался в списке, но не имел подсказок типа, которые являются необязательными, как мы можем избежать ошибок, если используемая переменная не является списком?

В этом уроке мы рассмотрим как проверить, является ли переменная списком в Python , используя функции type() и isinstance () , а также оператор is :

  • Проверьте, является ли переменная списком с типом()
  • Проверьте, является ли переменная списком с оператором is
  • Проверьте, является ли переменная списком с isinstance()

Разработчики обычно используют type() и is , хотя в определенных контекстах они могут быть ограничены, и в этом случае лучше использовать функцию isinstance () .

Проверьте, является ли переменная списком с типом()

Встроенная функция type() может быть использована для возврата типа данных объекта. Давайте создадим словарь, кортеж и список и используем функцию type () , чтобы проверить, является ли переменная list или нет:

grocery_list = ["milk", "cereal", "ice-cream"]
aDict = {"username": "Daniel", "age": 27, "gender": "Male"}
aTuple = ("apple", "banana", "cashew")

# Prints the type of each variable
print("The type of grocery_list is ", type(grocery_list))
print("The type of aDict is ", type(aDict))
print("The type of aTuple is ", type(aTuple))

Это приводит к:

The type of grocery_list is  
The type of aDict is  
The type of aTuple is  

Теперь, чтобы изменить поток кода программно, основываясь на результатах этой функции:

a_list = [1, 2, 3, 4, 5]

# Checks if the variable "a_list" is a list
if type(a_list) == list:
    print("Variable is a list.")
else:
    print("Variable is not a list.")

Это приводит к:

"Variable is a list."

Проверьте, является ли переменная списком с оператором is

Оператор is используется для сравнения идентификаторов в Python. То есть он используется для проверки, ссылаются ли два объекта на одно и то же место в памяти.

Результат type(variable) всегда будет указывать на ту же ячейку памяти, что и класс этой переменной . Итак, если мы сравним результаты функции type() нашей переменной с классом list , то она вернет True , если наша переменная является списком.

Давайте взглянем на оператор is :

a_list = [1, 2, 3, 4, 5]
print(type(a_list) is list)

Это приводит к:

True

Поскольку это может выглядеть не так для некоторых, давайте проведем проверку здравомыслия для этого подхода и сравним идентификаторы объектов в памяти:

print("Memory address of 'list' class:", id(list))
print("Memory address of 'type(a_list)':", id(type(a_list)))

Теперь они должны возвращать одно и то же число:

Memory address of 'list' class: 4363151680
Memory address of 'type(a_list)': 4363151680

Примечание: Вам нужно будет иметь в виду любые подтипы, если вы выбрали этот подход. Если вы сравните результат type() любого подтипа списка с классом list , он вернет False , даже если переменная является-a list, хотя и является его подклассом.

Этот недостаток оператора is исправляется в следующем подходе – с помощью функции isinstance () .

Проверьте, является ли переменная списком с isinstance()

Функция isinstance () -это еще одна встроенная функция, которая позволяет проверить тип данных переменной. Функция принимает два аргумента – переменную, для которой мы проверяем тип, и тип, который мы ищем.

Эта функция также принимает во внимание подклассы, поэтому любой list подкласс также вернет True для того, чтобы быть экземпляром list .

Давайте попробуем это сделать с помощью обычного list и User List из фреймворка collections :

from collections import UserList

regular_list = [1, 2, 3, 4, 5]
user_list = [6, 7, 8, 9, 10]

# Checks if the variable "a_list" is a list
if isinstance(regular_list, list):
    print("'regular_list' is a list.")
else:
    print("'regular_list' is not a list.")

# Checks if the variable "a_string" is a list
if isinstance(user_list, list):
    print("'user_list' is a list.")
else:
    print("'user_list' is not a list.")

Запуск этого кода приводит к:

'regular_list' is a list.
'user_list' is a list.

Вывод

Python-это динамически типизированный язык, и иногда из-за ошибки пользователя мы можем иметь дело с неожиданным типом данных.

В этом уроке мы рассмотрели три способа проверить, является ли переменная list в Python – функция type () , оператор is и функция isinstance () .