Operador in en Python: pruebas de pertenencia

Actualizado el: 11/07/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": "[email protected]",
    "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": "[email protected]",
    "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": "[email protected]"},
    {"id": 2, "correo": "[email protected]"},
]

objetivo = "[email protected]"

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

    Introdução ao Python para iniciantes
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    List comprehensions en Python: guía completa

    Aprende list comprehensions en Python con transformaciones, filtros, condiciones, bucles anidados, diccionarios, sets y generadores.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Leitura e escrita de arquivos CSV em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Archivos CSV en Python: leer, escribir y procesar

    Aprende a leer, escribir, filtrar y validar archivos CSV en Python con reader, writer, DictReader, DictWriter, UTF-8 y streaming.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Fatiamento de listas (slicing) em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Slicing en Python: guía completa con ejemplos

    Domina el slicing en Python con start, stop, step, índices negativos, copias, reemplazos, eliminación, inversión y ejemplos prácticos.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Leitura e escrita de arquivos TXT usando Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Cómo leer y escribir archivos de texto en Python

    Aprende a leer, escribir, añadir y procesar archivos de texto en Python con UTF-8, with, pathlib y manejo seguro de

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Pessoa usando tablet com caneta digital para planejar tarefas em checklist, representando organização, planejamento e produtividade digital.
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    sort() vs sorted() en Python: diferencias y ejemplos

    Aprende las diferencias entre sort() y sorted() en Python, con claves personalizadas, orden descendente, varios criterios y errores comunes.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Uso da função enumerate em loops Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    enumerate() en Python: bucles con índices

    Aprende enumerate() en Python para recorrer valores con índices, elegir el inicio, combinarlo con zip, procesar archivos y evitar contadores

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026