HOWTO · Python
Cómo usar if con cadenas en Python
Aprende a usar if para comparar cadenas en Python: igualdad, búsqueda de subcadenas, pertenencia a una colección y coincidencias sin distinguir mayúsculas y minúsculas.
En esta página
Usa una instrucción if con == para comparar el contenido de cadenas, in para buscar una subcadena o comprobar si una respuesta está permitida, y métodos como lower() cuando la comparación deba ignorar las mayúsculas. Elige la condición que corresponda a la tarea: por defecto, las comparaciones de cadenas distinguen mayúsculas y minúsculas, e is comprueba la identidad del objeto, no la igualdad del texto.
Comparación básica de cadenas
Usa == cuando dos cadenas deban contener el mismo texto y != cuando deban ser distintas. Los nombres a ambos lados de una comparación deben estar definidos antes de evaluar la condición. Para una explicación más amplia, consulta Comparación de cadenas en Python.
Este ejemplo sencillo comprueba si coincide un nombre:
name = "Alice"
if name == "Alice":
print("Hello, Alice!")
else:
print("You're not Alice.")
Python distingue entre mayúsculas y minúsculas al comparar cadenas, así que "Alice" == "alice" es falso. También puedes comparar longitudes con len() cuando la tarea dependa del tamaño y no del contenido:
word1 = "Python"
word2 = "Programming"
if len(word1) < len(word2):
print(f"{word1} is shorter than {word2}")
else:
print(f"{word1} is not shorter than {word2}")
Los operadores <, >, <= y >= comparan cadenas en orden lexicográfico según los puntos de código Unicode; no miden el significado de las palabras ni garantizan el orden alfabético en todos los idiomas. Para ordenar texto que se mostrará a usuarios, utiliza un método de ordenación adecuado al idioma y la configuración regional.
Usar la palabra clave in con cadenas
Con una cadena, in comprueba si el texto de la izquierda aparece como subcadena. La comprobación distingue mayúsculas y minúsculas, y la coincidencia no tiene que ser una palabra independiente:
sentence = "Python is awesome"
if "awesome" in sentence:
print("The sentence contains 'awesome'")
Para comprobar si una entrada coincide exactamente con una de varias cadenas aceptadas, usa una colección. En el siguiente ejemplo, la respuesta del usuario se convierte a minúsculas antes de comprobar si pertenece a la colección:
user_input = "y"
if user_input.lower() in ["y", "yes", "yeah"]:
print("User agreed")
else:
print("User did not agree")
Para comprobar subcadenas y consultar patrones relacionados, lee Cómo comprobar si una cadena contiene otra en Python. Para encontrar coincidencias repetidas, consulta Buscar todas las apariciones de un carácter en una cadena.
Comparación de cadenas sin distinguir mayúsculas y minúsculas
Normaliza ambos lados cuando la comparación deba ignorar las mayúsculas. lower() es una opción habitual para comparaciones sencillas; casefold() está diseñado para realizar comparaciones sin distinción de mayúsculas más completas en texto Unicode. La normalización cambia la estrategia de comparación, así que úsala solo cuando la tarea requiera ignorar las mayúsculas.
user_input = "YES"
if user_input.lower() == "yes":
print("Affirmative response received")
El mismo patrón sirve para comprobar pertenencia:
color = "RED"
if color.lower() in ["red", "blue", "green"]:
print("Color accepted")
else:
print("Color not accepted")
Usa lower() o upper() para convertir texto de forma sencilla a minúsculas o mayúsculas. Encontrarás más ejemplos en Convertir una cadena a minúsculas o mayúsculas en Python.
Comparaciones avanzadas de cadenas
Detectar anagramas
Ordenar los caracteres permite comprobar de forma sencilla si dos cadenas contienen los mismos caracteres en las mismas cantidades:
word1 = "listen"
word2 = "silent"
if sorted(word1) == sorted(word2):
print("The words are anagrams")
Este método trata las letras mayúsculas y minúsculas como caracteres distintos e incluye espacios y signos de puntuación. Normaliza o filtra primero las cadenas si quieres ignorar esos caracteres.
Usar métodos de cadenas
Métodos como startswith() y endswith() expresan directamente las comprobaciones de prefijos y sufijos:
filename = "document.txt"
if filename.endswith(".txt"):
print("Text file detected")
Combinar varias condiciones
Combina comprobaciones con and, or y not. Para que se cumpla toda la condición, cada parte de una expresión con and debe ser verdadera:
name = "John Doe"
if name.startswith("John") and " " in name:
print("Name matches the expected format")
Esta es solo una comprobación de texto sencilla; no valida todos los formatos de nombre posibles.
Comparar identidad
is pregunta si dos nombres hacen referencia al mismo objeto. Usa == para comparar el contenido de cadenas: la identidad del objeto no es una forma fiable de comprobar si dos textos son iguales.
first = "Python"
second = "Python"
if first == second:
print("The strings have equal contents")
Conclusión
Usa == o != para comparar el contenido de cadenas, in para comprobar si una subcadena aparece en otra o si un valor pertenece a una colección, y la normalización de mayúsculas cuando estas no deban importar. Para comprobar prefijos y sufijos, usa métodos de cadenas. Si quieres comparar texto, utiliza ==; is responde a otra pregunta: si dos referencias apuntan al mismo objeto.
Preguntas frecuentes
¿En Python las comparaciones de cadenas distinguen mayúsculas y minúsculas?
Sí. De forma predeterminada, "Python" y "python" son cadenas distintas. Normaliza ambos valores cuando quieras ignorar las mayúsculas.
¿Puede una instrucción if comprobar varias condiciones relacionadas con cadenas?
Sí. Une las condiciones con and u or, y usa paréntesis cuando ayuden a dejar claro cómo deben agruparse.
¿Cuál es la diferencia entre == e is?
== compara valores; is comprueba si dos referencias apuntan al mismo objeto. Para comparar el contenido de cadenas, usa ==.
¿Cómo compruebo si una cadena empieza o termina con un texto específico?
Llama a startswith() o endswith(). Por ejemplo, filename.endswith(".txt") comprueba si el nombre termina en .txt.
¿Puedo usar expresiones regulares en una condición if?
Sí. Cuando necesites definir un patrón de búsqueda, puedes llamar en la condición a una función del módulo re de Python, como re.search(pattern, text). Para comprobar una subcadena sencilla, in suele ser más directo.