Python: compruebe si la variable es una lista

En este tutorial, veremos cómo verificar si una variable es una lista en Python. Usaremos las funciones type() e isinstance() y el operador is.

Introducción

Python es un lenguaje tipado dinámicamente, y los tipos de datos variables se infieren sin la intervención explícita del desarrollador.

Si tuviéramos un código que necesitaba una lista pero carecía de sugerencias de tipo, que son opcionales, ¿cómo podemos evitar errores si la variable utilizada no es una lista?

En este tutorial, veremos cómo comprobar si una variable es una lista en Python, usando las funciones type() y isinstance(), así como el operador is:

Los desarrolladores suelen usar type() y is, aunque estos pueden estar limitados en ciertos contextos, en cuyo caso, es mejor usar la función isinstance().

Comprobar si la variable es una lista con type()

La función integrada type() se puede utilizar para devolver el tipo de datos de un objeto. Vamos a crear un Diccionario, una Tupla y una Lista y usar la función type() para verificar si una variable es una lista o no:

1
2
3
4
5
6
7
8
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))

Esto resulta en:

1
2
3
The type of grocery_list is  <class 'list'>
The type of aDict is  <class 'dict'>
The type of aTuple is  <class 'tuple'>

Ahora, para alterar el flujo de código programáticamente, según los resultados de esta función:

1
2
3
4
5
6
7
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.")

Esto resulta en:

1
"Variable is a list."

Verificar si la variable es una lista con es operador {#verificar si la variable es una lista con un operador}

El operador is se usa para comparar identidades en Python. Es decir, se usa para verificar si dos objetos se refieren a la misma ubicación en la memoria.

El resultado de type(variable) siempre apuntará a la misma ubicación de memoria que la clase de esa variable. Entonces, si comparamos los resultados de la función type() en nuestra variable con la clase list, devolverá True si nuestra variable es una lista.

Echemos un vistazo al operador es:

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

Esto resulta en:

1
True

Dado que esto podría parecer extraño para algunos, hagamos una verificación de cordura para este enfoque y comparemos las ID de los objetos en la memoria también:

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

Ahora, estos deberían devolver el mismo número:

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

Nota: Deberá tener en cuenta los subtipos si ha optado por este enfoque. Si compara el resultado type() de cualquier subtipo de lista, con la clase list, devolverá False, aunque la variable es-una lista, aunque una subclase de eso

Esta deficiencia del operador is se soluciona en el siguiente enfoque: utilizando la función isinstance().

Comprobar si la variable es una lista con isinstance()

La función isinstance() es otra función integrada que le permite comprobar el tipo de datos de una variable. La función toma dos argumentos: la variable para la que estamos comprobando el tipo y el tipo que estamos buscando.

Esta función también tiene en cuenta las subclases, por lo que cualquier subclase de lista también devolverá Verdadero por ser una instancia de lista.

Probemos esto con una lista normal y una UserList del marco colecciones:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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.")

Ejecutar este código da como resultado:

1
2
'regular_list' is a list.
'user_list' is a list.

Conclusión

Python es un lenguaje de tipo dinámico y, a veces, debido a un error del usuario, podemos tratar con un tipo de datos inesperado.

En este tutorial, hemos repasado tres formas de comprobar si una variable es una lista en Python: la función type(), el operador is y la función isinstance().

Licensed under CC BY-NC-SA 4.0