Strings#

Las cadenas nos permiten almacenar un conjunto de caracteres ordenados. Podemos definir una cadena usando

  • comillas simples: 'Hello world'

  • comillas dobles: "Hello world"

  • comillas triples: '''Hello world''' o """Hello world"""

Por defecto, Python utiliza la codificación UTF-8 para representar una amplia gama de caracteres, como pueden ser las tildes, nuestra ñ o una letra del alfabeto chino

print("你好")
你好

Al igual que pasaba con los tipos numéricos, las cadenas en Python son objetos inmutables, es decir, una vez creados no pueden ser modificados. El tipo correspondiente es str

type("Hello")
str
isinstance("42", str)
True
str(True)
'True'

Otra característica de las cadenas es que son objetos secuenciales, es decir, tienen un orden interno y podemos acceder a sus objetos a través de un entero empezando en 0.

sentence = "En un lugar de la mancha de cuyo nombre no quiero acordarme"
print(sentence[0])
print(sentence[6:15])
print(sentence[-1])
print(sentence[6:])
print(sentence[:-5])
E
lugar de 
e
lugar de la mancha de cuyo nombre no quiero acordarme
En un lugar de la mancha de cuyo nombre no quiero acor

Estas operaciones de indexado no son exclusivas de las cadenas, si no que se pueden aplicar a cualquier tipo que sea secuencial.

Podemos escribir saltos de líneas y tabulaciones mediante los caracteres \n y \t, respectivamente. Si queremos obviar el comportamiento de estos caracteres, podemos utilizar la función repr en lugar de print

x = "foo...\n...bar"
print(x)
repr(x)
foo...
...bar
"'foo...\\n...bar'"

Si queremos escribir una cadena a lo largo de varias líneas, podemos utilizar comillas triples y ahorrarnos el \n

y = """
foo...
...bar
"""
print(y)
foo...
...bar

Funciones para manipular cadenas#

Python incorpora un gran número de funciones y métodos para operar con cadenas. A continuación mostramos algunas de las más comunes

# Convierte la primera letra en mayúscula
"hello bye".capitalize()
'Hello bye'
# Convierte en mayúscula y minúscula
"89fdsHJFjl43FD92".upper() #.lower()
'89FDSHJFJL43FD92'
# Une una lista de cadenas mediante otra cadena
"...".join(["A", "B", "C"])
'A...B...C'
# Separa una cadena en una lista de cadenas
"Universidad de Sevilla".split(" ")
['Universidad', 'de', 'Sevilla']
# reemplaza una parte de una cadena por otra
"Facultad de Física".replace("Física", "Matemáticas")
'Facultad de Matemáticas'

Muchas más funciones pueden encontrarse en la documentación oficial


f-strings#

Las cadenas formateadas o f-strings nos permiten incrustar variables en una cadena con una sintaxis muy cómoda. Para definir una cadena mediante este método, escribimos una f justo antes de las comillas (ya sean simples, dobles o triples). Veámoslo con un ejemplo

nombre = "Antonio"
edad = 45
msg = f"Me llamo {nombre} y tengo {edad} años"
print(msg)
Me llamo Antonio y tengo 45 años

No solo podemos incluir variables si no expresiones que son directamente evaluadas

x = 584930589
y = 26
msg = f"El cociente de dividir {x} entre {y} vale {x % y}"
print(msg)
El cociente de dividir 584930589 entre 26 vale 9

Las cadenas formatedas no están disponibles en versiones de Python anteriores a la 3.6, en su lugar hay que usar la antigua sintaxis con la función format. Para mostrar un número concreto de decimales u otras opciones, existe la posibilidad de formatear las cadenas

from math import pi
print(f"El número 10pi con 5 decimales: {10*pi:0.5f}")
El número 10pi con 5 decimales: 31.41593

Exercise 6

¿En qué se diferencian las funciones split y rsplit?

Exercise 7

Considera las siguientes cadenas

x = "foo\nbar"
y = """
foo
bar
"""

¿Se tiene que x == y? ¿Por qué?

Exercise 8

Utilizando la variable ascii_lowercase del módulo string, escribe una cadena formateada que indique si tu nombre contiene la decimosegunda letra del abecedario.

import string
contains: bool = string.ascii_lowercase[11] in "Javier".lower()
f"Mi nombre contiene la decimosegunda letra del abecedario: {contains}"
'Mi nombre contiene la decimosegunda letra del abecedario: False'