Uso avanzado de strings en Python

Uso avanzado de strings en Python

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 «0»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curso de Python Entrada anterior Soluciones de ejercicios con eventos de Tkinter – 100 días de Python #12
curso de Python Entrada siguiente Ejercicios de Python con strings