100 días de Python #13
Volvemos a un día técnico pero muy útil sobre el uso avanzado de strings en Python. No serán ni mucho menos cosas supercomplicadas de entender. Hasta ahora, los hemos manejado de forma básica en el curso. Ha llegado la hora de hacer un pequeño master en strings de Python.
Concatenar strings con el operador +
El uso del operador + para concatenar, es la forma más básica que se suele utilizar para este cometido. Sin embargo, presenta problemas ya conocidos en el curso como los que verás a continuación.
Concatenación pegada
p = "Programación" f = "Fácil" print(p + f)
Resultado en la consola
ProgramaciónFácil
Concatenación con espacios
La solución a esto, era agregar un string extra con un espacio o añadir los espacios a uno de los strings. Algo muy molesto.
p = "Programación " f = "Fácil" print(p + f)
p = "Programación" f = "Fácil" print(p + " " + f)
En ambos casos, el resultado es el mismo:
Resultado en la consola
Programación Fácil
Errores utilizando el operador + para concatenar
Uno de los errores típicos al usar este operador para concatenar, es el de mezclar int y str.
p = "Texto" f = 10 print(p + " " + f)
La solución a esto, la vimos en el día 2 del curso, pero no está de más un recordatorio. Podríamos transformar a string el valor int.
p = "Texto" f = 10 print(p + " " + str(f))
Concatenar strings con el operador coma (,)
Ya me habéis comentado varios sobre este tipo de concatenación. Se trata de concatenar empleando el operador coma. En este caso, no tenemos que tener en cuenta si aparecen las concatenaciones pegadas, ya que añade un espacio tras cada coma que pongamos.
p = "Programación" f = "Fácil" print(p,f)
Resultado en la consola
Programación Fácil
Concatenar con el método join() de Python
La clase str de Python, tiene una buena colección de métodos. Uno de ellos es el método join(), el cual nos sirve también para concatenar strings.
En esta ocasión, vamos a concatenar las dos variables mediante una lista pasada de argumento al join.
p = "Programación" f = "Fácil" print("".join([p, f]))
Resultado en la consola
ProgramaciónFácil
El texto aparece junto. Solo hay que añadirle un espacio al string y nos añade ese espacio tras cada string concatenado.
p = "Programación" f = "Fácil" print(" ".join([p, f]))
Resultado en la consola
Programación Fácil
Si quieres, prueba con más strings y verás que el espacio entre ellos se concatena automáticamente.
El método join(), tal y como tiene descrito en su parámetro, espera un elemento iterable con valores string.
def join(self, __iterable: Iterable[str])
Si concatenas números, por ejemplo, en una lista, te dará error:
print("".join([6,6]))
Error en la consola
TypeError: sequence item 0: expected str instance, int found
Error de tipo: elemento de secuencia número 0: se esperaba una instancia de tipo string, en su lugar, se encontró de tipo int.
Seguramente te confunda esto:
print(" ".join([p,f]))
¿Por qué se pone un vacío o con un espacio string y sale incluido lo que le pasamos al join()?
El valor a concatenar, no tiene porqué ser un string vacío o un espacio. Puede ser lo que tú quieras. Esto es solo un valor literal.
Pasemos una variable con otro valor para que puedas apreciarlo.
colores = ["rojo", "azul", "verde", "amarillo"] separador = "*" concatena = separador.join(colores) print(concatena)
Resultado en la consola
rojo*azul*verde*amarillo
Y he puesto «*», pero pueden ser los caracteres que quieras y más de uno.
Formateo de strings con el operador % en Python
Pasemos a ver otra de las muchas formas de concatenación que tiene Python, se trata de utilizar el operador %.
p = "Programación" f = "Fácil" print("%s %s" % (p,f))
Resultado en la consola
Programación Fácil
Como puedes ver, el resultado es el mismo que utilizando solo (p,f) en el print() y es bastante más complicado de escribir. Ya veremos más ejemplos con esto.
De momento, que sepas que «%s» se utiliza como un comodín que es sustituido por la primera variable (p) y el otro %s con la siguiente variable. En el orden de aparición.
Si quieres concatenar integers, el símbolo es %i (integer) o %d (digit) y para los float %f.2
No vamos a tocar más este operador en el día de hoy. Ya habrá tiempo de profundizar en esto.
Por cierto, no confundir el uso de este operador aquí, con el operador módulo de las divisiones.
Formateo de strings con el método format() de Python
Otro método que verás mucho es el método format(), el cual tiene una utilización parecida a la del apartado anterior. Solo que en este caso, es más flexible. La otra obliga a utilizar cierto tipo de dato, esta no.
Se reemplaza cada {} por una variable, en el mismo orden de aparición en los argumentos del format:
p = "Programación" f = "Fácil" print("{} {}".format(p, f))
Resultado en la consola
Programación Fácil
Formateo de strings con el prefijo f en Python
El formateo de strings con el prefijo f, lo llevamos viendo desde el día 2 del curso, así que no me voy a detener a explicarlo de nuevo.
p = "Programación" f = "Fácil" print(f"{p} {f}")
Resultado en la consola
Programación Fácil
Dividir un string en varias líneas
Veamos el siguiente string:
texto = "Lorem ipsum dolor sit amet consectetur adipiscing elit volutpat vehicula diam fames nascetur est, malesuada tortor vulputate ante sapien aliquam quisque ligula id lobortis egestas tempor."
Si cargas esto en Visual Studio Code (o en otro programa que utilices) verás que nos va colocando el strings en varias líneas. No obstante, si miras el número de línea, verás que todo es una sola línea de código. Si alejas el zoom, verás que, efectivamente, es una línea muy larga.
Si no te gusta escribir código con líneas tan largas, lo que puedes hacer, es realizar divisiones del string como en el siguiente código:
texto = "Lorem ipsum dolor sit amet" "consectetur adipiscing elit" "volutpat vehicula diam fames" "nascetur est, malesuada tortor" "vulputate ante sapien aliquam" "quisque ligula id lobortis egestas" "tempor." print(texto)
El problema aquí, es que reconoce como valor de la variable texto, lo que tiene entre las primeras comillas. El resto de líneas, no dan error, las toma por valores literales de string.
Resultado en la consola
Lorem ipsum dolor sit amet
Los paréntesis en Python sirven para muchas cosas. Una de ellas es agrupar expresiones. Si envolvemos el conjunto de strings con unos, estamos agrupando todos estos strings en uno solo.
texto = ("Lorem ipsum dolor sit amet" "consectetur adipiscing elit" "volutpat vehicula diam fames" "nascetur est, malesuada tortor" "vulputate ante sapien aliquam" "quisque ligula id lobortis egestas" "tempor.") print(texto)
Resultado en la consola
Lorem ipsum dolor sit ametconsectetur adipiscing elitvolutpat vehicula diam famesnascetur est, malesuada tortorvulputate ante sapien aliquamquisque ligula id lobortis egestastempor.
Strings preformateados en Python
En Python, al igual que hacemos con las etiquetas <pre> de HTML, podemos preformatear strings.
La sintaxis es la que utilizan los comentarios multilínea, tres comillas dobles o simples al inicio y al final.
Al estar esto dentro de una variable no comentada, el intérprete de Python, sabe distinguirlo de un comentario.
El resultado es que lo que vemos en el código, es lo que sale en la consola, sin tener que utilizar saltos de línea.
texto = """Lorem ipsum dolor sit amet consectetur adipiscing elit volutpat vehicula diam fames nascetur est, malesuada tortor vulputate ante sapien aliquam quisque ligula id lobortis egestas tempor""" print(texto)
Resultado en la consola
Lorem ipsum dolor sit amet
consectetur adipiscing elit
volutpat vehicula diam fames
nascetur est, malesuada tortor
vulputate ante sapien aliquam
quisque ligula id lobortis egestas
tempor
texto = ''' Lorem ipsum dolor sit amet consectetur adipiscing elit volutpat vehicula diam fames nascetur est, malesuada tortor vulputate ante sapien aliquam quisque ligula id lobortis egestas tempor''' print(texto)
Resultado en la consola
Lorem ipsum dolor sit amet
consectetur adipiscing elit
volutpat vehicula diam fames
nascetur est, malesuada tortor
vulputate ante sapien aliquam
quisque ligula id lobortis egestas
tempor
Multiplicar strings en Python
Multiplicar strings puede parecer una locura, pero la verdad es que es maravilloso.
texto = "Lorem ipsum dolor sit amet consectetur adipiscing elit volutpat vehicula diam fames nascetur est, malesuada tortor vulputate ante sapien aliquam quisque ligula id lobortis egestas tempor." print(p*3+" "+f*4)
Resultado en la consola
ProgramaciónProgramaciónProgramación FácilFácilFácilFácil
Sencillamente, p*3 es el equivalente a llamar 3 veces a la variable «p». f*4 la «f» cuatro veces. Así sería sin utilizar la multiplicación:
p = "Programación" f = "Fácil" print(p+p+p+" "+f+f+f+f)
Iteración de strings
Ya te mostré como iterar una lista con un bucle for. ¿Sabrías iterar un string?
pf = "Programación Fácil" for caracter in pf: print(caracter)
Resultado en la consola
P
r
o
g
r
a
m
a
c
i
ó
n
F
á
c
i
l
Comprobar si un string está en otro string
Otra de las cosas que Python permite hacer muy fácil, es la coincidencia de un string con otro.
Con esto, evalúo si ‘ción’ está dentro del otro string. Si hay coincidencia, devuelve True, en caso contrario, False. Esto te servirá para establecer expresiones en los condicionales. Si está ‘ción’ en el string tal, haz esto…
print('ción' in 'Programación Fácil')
Resultado en la consola
True
Para evaluar todo lo contrario, utiliza la negación con not.
print('ción' not in 'Programación Fácil')
Resultado en la consola
False
Generar un diccionario con las posiciones y caracteres de un string
Otra cosa curiosa que permite Python, es crear un diccionario con las posiciones y caracteres a partir de un string. El índice o posición, lo pone como clave y el carácter como valor. Ya le encontraremos utilidad a esto.
pf = "Programación Fácil" lista_pf = dict(enumerate(pf)) print(lista_pf)
Resultado en la consola
{0: ‘P’, 1: ‘r’, 2: ‘o’, 3: ‘g’, 4: ‘r’, 5: ‘a’, 6: ‘m’, 7: ‘a’, 8: ‘c’, 9: ‘i’, 10: ‘ó’, 11: ‘n’, 12: ‘ ‘, 13: ‘F’, 14: ‘á’, 15: ‘c’, 16: ‘i’, 17: ‘l’}
Por cierto, si utilizas el constructor list() en lugar del constructor dict(), crea una lista con tuplas.
pf = "Programación Fácil" lista_pf = list(enumerate(pf)) print(lista_pf)
Resultado en la consola
[(0, ‘P’), (1, ‘r’), (2, ‘o’), (3, ‘g’), (4, ‘r’), (5, ‘a’), (6, ‘m’), (7, ‘a’), (8, ‘c’), (9, ‘i’), (10, ‘ó’), (11, ‘n’), (12, ‘ ‘), (13, ‘F’), (14, ‘á’), (15, ‘c’), (16, ‘i’), (17, ‘l’)]
Si lo haces con tuple, es lo mismo, pero todo tuplas.
pf = "Programación Fácil" lista_pf = tuple(enumerate(pf)) print(lista_pf)
Resultado en la consola
((0, ‘P’), (1, ‘r’), (2, ‘o’), (3, ‘g’), (4, ‘r’), (5, ‘a’), (6, ‘m’), (7, ‘a’), (8, ‘c’), (9, ‘i’), (10, ‘ó’), (11, ‘n’), (12, ‘ ‘), (13, ‘F’), (14, ‘á’), (15, ‘c’), (16, ‘i’), (17, ‘l’))
Con los sets es curioso, ya que al estar cada carácter en una tupla, nos aparece desordenado.
pf = "Programación Fácil" lista_pf = set(enumerate(pf)) print(lista_pf)
Resultado en la consola
{(9, ‘i’), (12, ‘ ‘), (13, ‘F’), (16, ‘i’), (2, ‘o’), (11, ‘n’), (5, ‘a’), (3, ‘g’), (8, ‘c’), (1, ‘r’), (10, ‘ó’), (0, ‘P’), (6, ‘m’), (7, ‘a’), (14, ‘á’), (15, ‘c’), (4, ‘r’), (17, ‘l’)}
Comillas dobles, simples y triples en Python
¿Nunca te has preguntado como se pueden poner comillas simples y dobles a la vez dentro de un string?
Si hago esto, dará error:
comillas = "El cielo es de color "azul". El cielo es de color 'azul'." print(comillas)
Error en la consola
SyntaxError: invalid syntax
La solución reside en las comillas triples:
comillas = """El cielo es de color "azul". El cielo es de color 'azul'.""" print(comillas)
Resultado en la consola
El cielo es de color «azul». El cielo es de color ‘azul’.
Pasemos ya a la parte práctica con unos ejercicios y mini proyecto relacionados con el temario.
2 comentarios en «Uso avanzado de strings en Python»