Operador in: pruebas de pertenencia en Python

Actualizado el: 20/08/2026
Tempo de leitura: 3 minutos
Uso do operador in em Python para verificação em coleções

El operador in responde una pregunta frecuente: ¿este valor pertenece a esta colección? Funciona con strings, listas, tuplas, sets, diccionarios, rangos, generadores y objetos personalizados. Aunque la sintaxis es sencilla, su significado y rendimiento dependen del objeto que se busca.

En esta guía aprenderás el operador in en Python, not in, el comportamiento de los diccionarios, búsquedas de substrings, pertenencia eficiente en sets, consumo de iteradores y clases con __contains__.

Pruebas básicas

colores = ["rojo", "verde", "azul"]

print("verde" in colores)       # True
print("amarillo" not in colores)  # True

El resultado es booleano y puede utilizarse directamente en una condición.

roles_permitidos = {"admin", "editor", "lector"}
rol = "editor"

if rol in roles_permitidos:
    print("Rol reconocido")
else:
    print("Rol desconocido")

Pertenencia en strings

Con strings, in busca una substring, no solamente un carácter. La comprobación distingue mayúsculas y minúsculas.

mensaje = "Python facilita la automatización"

print("automatización" in mensaje)  # True
print("Automatización" in mensaje)  # False
print("thon" in mensaje)            # True

Para una búsqueda que ignore mayúsculas, normaliza ambos valores con casefold().

mensaje = "Python Facilita la Automatización"
consulta = "AUTOMATIZACIÓN"

encontrado = consulta.casefold() in mensaje.casefold()

La guía de strings en Python explica otros métodos de limpieza, búsqueda y comparación.

Listas y tuplas

En una lista o tupla, Python compara elementos desde el principio hasta encontrar un valor igual o llegar al final.

coordenadas = (10, 20, 30)
numeros = [2, 4, 6, 8]

print(20 in coordenadas)
print(5 in numeros)

Para repasar creación y modificación de listas, consulta listas en Python.

Sets para búsquedas repetidas

Los sets están diseñados para valores únicos y pruebas de pertenencia eficientes. Convertir una lista tiene un coste, pero puede compensar cuando realizas muchas búsquedas.

usuarios_bloqueados = {"sam", "lee", "alex"}

usuario = "lee"

if usuario in usuarios_bloqueados:
    print("Solicitud rechazada")

Utiliza una lista cuando el orden y los duplicados sean importantes; utiliza un set cuando la pertenencia y la unicidad sean centrales. La guía de sets en Python explica unión, intersección y diferencia.

Los diccionarios comprueban claves

En un diccionario, in busca claves por defecto, no valores ni pares completos.

usuario = {
    "nombre": "Maya",
    "correo": "maya@example.com",
    "activo": True,
}

print("correo" in usuario)                    # True
print("Maya" in usuario)                     # False
print("Maya" in usuario.values())            # True
print(("nombre", "Maya") in usuario.items()) # True

La guía de diccionarios en Python muestra claves, valores y pares.

Rangos

La pertenencia en range es eficiente porque Python puede calcular si un número cumple el inicio, el fin y el paso.

pares = range(0, 1_000_000, 2)

print(500_000 in pares)
print(500_001 in pares)

Los iteradores se consumen

Ten cuidado con generadores y otros iteradores de una sola pasada. La búsqueda avanza por los valores y puede consumir parte o todo el objeto.

numeros = (numero for numero in range(5))

print(2 in numeros)   # consume 0, 1 y 2
print(list(numeros))  # quedan 3 y 4

Si el valor no existe, el iterador puede quedar agotado completamente.

Validar con not in

comandos_validos = {"iniciar", "detener", "estado"}
comando = input("Comando: ").strip().lower()

if comando not in comandos_validos:
    print("Comando inválido")
else:
    print(f"Ejecutando {comando}")

not in resulta útil en guard clauses y validaciones tempranas.

def establecer_prioridad(prioridad):
    permitidas = {"baja", "media", "alta"}

    if prioridad not in permitidas:
        raise ValueError(
            f"Prioridad desconocida: {prioridad}"
        )

    return prioridad

Comprobar varias claves obligatorias

datos = {
    "nombre": "Maya",
    "correo": "maya@example.com",
    "activo": True,
}

obligatorias = {"nombre", "correo"}

if obligatorias <= datos.keys():
    print("Datos completos")

También puedes usar all():

if all(clave in datos for clave in obligatorias):
    print("Datos completos")

Buscar dentro de estructuras anidadas

La pertenencia no es recursiva. Para buscar un campo dentro de una lista de diccionarios, escribe la condición explícitamente.

usuarios = [
    {"id": 1, "correo": "ada@example.com"},
    {"id": 2, "correo": "grace@example.com"},
]

objetivo = "grace@example.com"

existe = any(
    usuario["correo"] == objetivo
    for usuario in usuarios
)
print(existe)

La expresión generadora evita crear una lista temporal. La guía de list comprehensions en Python explica transformaciones y filtros relacionados.

Personalizar con __contains__

class RangoTemperatura:
    def __init__(self, minimo, maximo):
        self.minimo = minimo
        self.maximo = maximo

    def __contains__(self, valor):
        return self.minimo <= valor <= self.maximo

confortable = RangoTemperatura(18.0, 25.0)

print(22.5 in confortable)
print(30.0 in confortable)

Una implementación personalizada debe ser predecible y no debería modificar el estado ni realizar solicitudes remotas.

in no es igual a is

is comprueba identidad de objetos. in comprueba pertenencia y normalmente utiliza igualdad.

elementos = [1, 2, 3]
misma_referencia = elementos
otra_lista = [1, 2, 3]

print(elementos is misma_referencia)  # True
print(elementos is otra_lista)        # False
print(2 in elementos)                 # True

Errores frecuentes

  • Esperar que un diccionario busque valores en lugar de claves.
  • Olvidar que las búsquedas de strings distinguen mayúsculas.
  • Usar una lista para miles de búsquedas repetidas cuando conviene un set.
  • Consumir un generador y esperar que conserve todos los elementos.
  • Suponer que la búsqueda entra automáticamente en estructuras anidadas.
  • Confundir pertenencia, igualdad e identidad.

Conclusión

El operador in en Python es pequeño pero muy versátil. Comprende qué considera miembro cada objeto, utiliza sets y diccionarios para búsquedas frecuentes, normaliza texto de forma deliberada y recuerda que los iteradores pueden consumirse.

Documentación oficial

La referencia del lenguaje explica las pruebas de pertenencia con in y not in. La documentación de tipos integrados detalla cómo se comportan strings, secuencias, sets, rangos y diccionarios.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    notebook com código saindo da tela
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Variables: asignación, tipos y alcance en Python

    Aprende variables en Python: asignación, nombres, tipos, conversiones, referencias, mutabilidad, alcance, constantes, None y errores frecuentes.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    Diferença entre operadores is e == em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    == vs is en Python: igualdad vs identidad

    Entiende la diferencia entre == e is en Python, igualdad, identidad, None, interning, copias superficiales, deepcopy y objetos personalizados.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    Menu interativo no terminal criado com Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Menú interactivo en terminal con Python

    Crea un menú interactivo en Python con while, funciones, diccionarios, validación, submenús, persistencia JSON y manejo seguro de errores.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    ícone de loop com o texto 'While' abaixo
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    while: repite acciones con condiciones en Python

    Aprende bucles while en Python con condiciones, validación, menús, break, continue, else, centinelas, reintentos y buenas prácticas.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Imagem de um quadro negro com várias interrogações no lugar de lâmpadas, e uma lâmpada conectada no meio
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    if, elif y else: lógica condicional en Python

    Aprende if, elif y else en Python con comparaciones, operadores lógicos, validación, rangos, menús, retornos tempranos y pruebas.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Manipulação de dados JSON em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    JSON en Python: leer, escribir y validar datos

    Aprende JSON en Python con load, loads, dump, dumps, archivos UTF-8, validación, APIs, Decimal, fechas y escritura segura.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026