Veamos cómo comparar strings en Python.
Método 1: uso de operadores relacionales
Los operadores relacionales comparan los caracteres de las strings desde el índice cero hasta el final de la string. Luego devuelve un valor booleano de acuerdo con el operador utilizado.
Ejemplo:
«Geek» == «Geek» devolverá True ya que el Unicode de todos los caracteres es igual
En el caso de «Geek» y «geek» como el unicode de G es \u0047 y de g es \u0067
«Geek» < «geek» devolverá True y
«Geek» > «geek» devolverá False
Python3
print("Geek" == "Geek") print("Geek" < "geek") print("Geek" > "geek") print("Geek" != "Geek")
Producción:
True True False False
== es lo mismo
Entendamos esto con un ejemplo:
Python3
str1 = "Geek" str2 = "Geek" str3 = str1 print("ID of str1 =", hex(id(str1))) print("ID of str2 =", hex(id(str2))) print("ID of str3 =", hex(id(str3))) print(str1 is str1) print(str1 is str2) print(str1 is str3) str1 += "s" str4 = "Geeks" print("\nID of changed str1 =", hex(id(str1))) print("ID of str4 =", hex(id(str4))) print(str1 is str4)
Producción:
ID of str1 = 0x7f6037051570 ID of str2 = 0x7f6037051570 ID of str3 = 0x7f6037051570 True True True ID of changed str1 = 0x7f60356137d8 ID of str4 = 0x7f60356137a0 False
El ID de objeto de las strings puede variar en diferentes máquinas. Los ID de objeto de str1, str2 y str3 eran los mismos, por lo que el resultado es True en todos los casos. Después de cambiar la identificación del objeto de str1, el resultado de str1 y str2 será falso. Incluso después de crear str4 con el mismo contenido que en el nuevo str1, la respuesta será falsa ya que sus ID de objeto son diferentes.
Viceversa ocurrirá con no es.
Método 3: crear una función definida por el usuario .
Al usar operadores relacionales, solo podemos comparar las strings por sus códigos Unicode. Para comparar dos strings según otros parámetros, podemos crear funciones definidas por el usuario.
En el siguiente código, nuestra función definida por el usuario comparará las strings según la cantidad de dígitos.
Python3
# function to compare string # based on the number of digits def compare_strings(str1, str2): count1 = 0 count2 = 0 for i in range(len(str1)): if str1[i] >= "0" and str1[i] <= "9": count1 += 1 for i in range(len(str2)): if str2[i] >= "0" and str2[i] <= "9": count2 += 1 return count1 == count2 print(compare_strings("123", "12345")) print(compare_strings("12345", "geeks")) print(compare_strings("12geeks", "geeks12"))
Producción:
False False True