Python logo - Curso de Python desde cero

Cadenas o strings en Python

Vemos todo sobre las cadenas de caracteres o strings en Python

Continuamos nuestro curso de Python para principiantes, vimos en la anterior entrega el Polimorfismo en Python y en esta vamos a profundizar en las cadenas de caracteres o strings en python.

El texto es un tipo de datos de cadena. Cualquier tipo de datos escrito como texto es una cadena. Todos los datos entre comillas simples, dobles o triples son cadenas. Existen diferentes métodos de cadena y funciones integradas para manejar tipos de datos de cadena. Para verificar la longitud de una cadena, use el método len().

Crear una cadena

letra = 'P'    # Una cadena puede ser un solo carácter o un montón de textos
print(letra)   # P
print(len(letra))     # 1
saludo = '¡Hola, mundo!'  # Una cadena podría ser una comilla simple o doble, "¡Hola, Mundo!"
print(saludo)  # ¡Hola, mundo!
print(len(saludo))    # 13
frase = "Espero que estés disfrutando del curso de Python"
print(frase)

La cadena multilínea se crea usando comillas triples simples (»’) o triples dobles («»»). Consulte el ejemplo a continuación.

cadena_multilinea = '''Soy profesor y disfruto enseñando.
No encontré nada tan gratificante como capacitar a la gente.
Por eso he creado este curso de python.'''
print(cadena_multilinea)

# Otra forma de hacer lo mismo
string_multilinea = """Soy profesor y disfruto enseñando.
No encontré nada tan gratificante como capacitar a la gente.
Por eso he creado este curso de python."""
print(string_multilinea)

Concatenación de cadenas

Podemos conectar cadenas juntas. Combinar o conectar cadenas se llama concatenación. Vea el ejemplo a continuación:

nombre = "Alejandra"
apellido = "Palomo"
espacio = " "
nombre_completo = nombre + espacio + apellido
print(nombre_completo) # Alejandra Palomo
# Comprobación de la longitud de una cadena mediante la función len() incorporada
print(len(nombre_completo))  # 16
print(len(apellido))   # 6
print(len(nombre) > len(apellido)) # True
print(len(nombre_completo)) # 16

Secuencias de escape en cadenas

En Python y otros lenguajes de programación \ seguido de un carácter es una secuencia de escape. Veamos los caracteres de escape más comunes:

  • \n: nueva línea
  • \t: Tabulador significa (8 espacios)
  • \\: barra invertida
  • \': comillas simple (‘)
  • \": comillas dobles («)

Ahora, veamos el uso de las secuencias de escape anteriores con ejemplos.

print('Espero que estén disfrutando del\nCurso de Python') # salto de línea

print('Días\tTemas\tEjercicios') # añadir espacio de tabulación o 4 espacios 
print('Día 1\t3\t5')
print('Día 2\t3\t5')
print('Día 3\t3\t5')
print('Día 4\t3\t5')

print('Esto es un símbolo de barra invertida (\\)') # Para escribir una barra invertida
print('En todos los lenguajes de programación se empieza por \"¡Hola, Mundo!\"') # para escribir una comilla doble dentro de una comilla simple

Salida:

Espero que estén disfrutando del
Curso de Python
Días    Temas   Ejercicios
Día 1   3       5
Día 2   3       5
Día 3   3       5
Día 4   3       5
Esto es un símbolo de barra invertida (\)
En todos los lenguajes de programación se empieza por "¡Hola, Mundo!"

Formateo de cadenas en Python

Formato de cadena de estilo antiguo (operador %)

En Python hay muchas formas de formatear cadenas. En esta sección, cubriremos algunos de ellos. El operador «%» se utiliza para formatear un conjunto de variables encerradas en una tupla (una lista de tamaño fijo), junto con una cadena de formato, que contiene texto normal junto con «especificadores de argumento«, símbolos especiales como «%s» , «%d», «%f», «%.número de dígitosf».

  • %s – Cadena (o cualquier objeto con una representación de cadena, como los números)
  • %d – Enteros
  • %f – Números flotantes
  • «%.number of digitsf» – Números de punto flotante con precisión fija
# Sólo cadenas
nombre = 'Alejandra'
apellido = 'Palomo'
lenguaje = 'Python'
cadena_formateada = 'Soy %s %s. Enseño %s' %(nombre, apellido, lenguaje)
print(cadena_formateada)

# Cadenas y números
radio = 10
pi = 3.14
area = pi * radio ** 2
string_formateado = 'El área del círculo con un radio %d es %.2f.' %(radio, area) # 2 se refiere a los 2 dígitos significativos después del punto
print(string_formateado)

librerias_python = ['Pandas', 'Django', 'NumPy', 'Flask', 'Matplotlib']
cadena_formateada2 = 'Las siguientes son bibliotecas de python:%s' % (librerias_python)
print(cadena_formateada2) # "Las siguientes son bibliotecas python:['Pandas', 'Django', 'NumPy', 'Flask', 'Matplotlib']"

Salida:

Soy Alejandra Palomo. Enseño Python
El área del círculo con un radio 10 es 314.00.
Las siguientes son bibliotecas de python:['Pandas', 'Django', 'NumPy', 'Flask', 'Matplotlib']

Nuevo formato de cadena de estilo (str.format)

Este formato se introdujo en la versión 3 de Python.

nombre = 'Alejandra'
apellido = 'Palomo'
lenguaje = 'Python'
cadena_formateada = 'Soy {} {}. Enseño {}'.format(nombre, apellido, lenguaje)
print(cadena_formateada)

x = 5
z = 2
print('{} + {} = {}'.format(x, z, x + z))
print('{} - {} = {}'.format(x , z, x - z))
print('{} * {} = {}'.format(x , z, x * z))
print('{} / {} = {:.2f}'.format(x , z, x / z)) # lo limita a dos dígitos después del decimal
print('{} % {} = {}'.format(x , z, x % z))
print('{} // {} = {}'.format(x , z, x // z))
print('{} ** {} = {}'.format(x , z, x ** z))

s = "Los números son {a} y {b}".format(a=8, b=3)
print(s) #Los números son 8 y 3

# Cadenas y números
radio = 10
pi = 3.14
area = pi * radio ** 2
cadena_formateada2 = 'El área de un círculo con radio {} es {:.2f}'.format(radio, area) # 2 dígitos después del decimal
print(cadena_formateada2)
Soy Alejandra Palomo. Enseño Python

5 + 2 = 7
5 - 2 = 3
5 * 2 = 10
5 / 2 = 2.50
5 % 2 = 1
5 // 2 = 2
5 ** 2 = 25

Los números son 8 y 3

El área de un círculo con radio 10 es 314.00

Interpolación de cadenas (f-strings) Python 3.6+

Otro nuevo formato de cadena es la interpolación de cadenas, f-strings. Las cadenas comienzan con f y podemos inyectar los datos en sus posiciones correspondientes.

x = 6
z = 4
print(f'{x} + {z} = {x + z}')
print(f'{x} - {z} = {x - z}')
print(f'{x} * {z} = {x * z}')
print(f'{x} / {z} = {x / z:.2f}')
print(f'{x} % {z} = {x % z}')
print(f'{x} // {z} = {x // z}')
print(f'{x} ** {z} = {x ** z}')
6 + 4 = 10
6 - 4 = 2
6 * 4 = 24
6 / 4 = 1.50
6 % 4 = 2
6 // 4 = 1
6 ** 4 = 1296

Cadenas de Python como secuencias de caracteres

Las cadenas de Python son secuencias de caracteres y comparten sus métodos básicos de acceso con otras secuencias de objetos ordenadas de Python: listas y tuplas. La forma más sencilla de extraer caracteres individuales de cadenas (y miembros individuales de cualquier secuencia) es desempaquetarlos en las variables correspondientes.

Desempaquetar caracteres

variable = 'Cadenas'
a,b,c,d,e,f,e = variable # desempaquetar caracteres de secuencia en variables
print(a) # C
print(b) # a
print(c) # d
print(d) # e
print(e) # n
print(f) # a
print(e) # s

Acceso a caracteres en cadenas por índice

En la programación, el conteo comienza desde cero. Por lo tanto, la primera letra de una cadena tiene un índice cero y la última letra de una cadena es la longitud de una cadena menos uno.

['P', 'y', 't, 'h', 'o', 'n' ]
  0   1   2   3   4   5
color = 'Rojo'
primera_letra = color[0]
print(primera_letra) # R
segunda_letra = color[1]
print(segunda_letra) # o
ultimo_indice = len(color) - 1
ultima_letra = color[ultimo_indice]
print(ultima_letra) # o

Si queremos comenzar desde el extremo derecho, podemos usar la indexación negativa. -1 es el último índice.

color = 'Rojo'
ultima_letra = color[-1]
print(ultima_letra) # o
penultima_letra = color[-2]
print(penultima_letra) # j

Dividir cadenas de Python (Slicing)

En python podemos dividir cadenas en subcadenas.

color = 'Amarillo'
tres_primeras = color[0:3] # empieza en índice cero y hasta 3 pero no incluye 3
print(tres_primeras) #Ama
tres_ultimas = color[5:8]
print(tres_ultimas) # llo
# Otra forma
tres_ultimas2 = color[-5:]
print(tres_ultimas2) # llo
tres_ultimas3 = color[5:]
print(tres_ultimas3) # llo

Invertir una cadena

Podemos invertir cadenas fácilmente en python.

saludo = '¡Hola, mundo!'
print(saludo[::-1]) # !dlroW ,olleH

Saltar caracteres al cortar

Es posible omitir caracteres durante el corte pasando el argumento de paso al método de corte.

color = 'Amarillo'
resultado = color[0:8:2] 
print(resultado) # Aail

Métodos de cadena

Hay muchos métodos de cadena que nos permiten formatear cadenas. Vea algunos de los métodos de cadena en el siguiente ejemplo:

capitalize()

Convierte el primer carácter de la cadena en letra mayúscula.

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(challenge.capitalize()) # 'métodos de cadena que nos permiten formatear cadenas'

count()

Devuelve ocurrencias de una subcadena en la cadena, count(subcadena, inicio, final). El inicio es un índice inicial para contar y el final es el último índice para contar.

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.count('m')) # 3
print(mi_string.count('m', 25, 35)) # 1
print(mi_string.count('en')) # 2

endswith()

Comprueba si una cadena termina con un final específico.

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.endswith('rings'))   # Verdadero
print(mi_string.endswith('atear')) # Falso

expandtabs()

Reemplaza el carácter de tabulación por espacios, el tamaño de tabulación predeterminado es 8. Toma el argumento de tamaño de tabulación.

mi_string = 'P\te\tr\td\to\tn\ta'
mi_string2 = 'métodos\tde\tcadena\tque\tnos\tpermiten\tformatear\tstrings'
print(mi_string.expandtabs()) 
print(mi_string.expandtabs(10)) 
print(mi_string2.expandtabs()) 
print(mi_string2.expandtabs(10)) 

Salida:

P       e       r       d       o       n       a
P         e         r         d         o         n         a
métodos de      cadena  que     nos     permiten        formatear       strings
métodos   de        cadena    que       nos       permiten  formatear strings

find()

Devuelve el índice de la primera aparición de una subcadena, si no se encuentra devuelve -1.

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.find('de'))  # 8
print(mi_string.find('en')) # 14

rfind()

Devuelve el índice de la última aparición de una subcadena, si no se encuentra devuelve -1.

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.rfind('de'))  # 13
print(mi_string.rfind('en')) # 32

format()

Formatea la cadena para que salga más agradable.

nombre = 'Alejandra'
apellido = 'Palomo'
edad = 35
trabajo = 'profesora'
pais = 'Portugal'

frase = 'Soy {} {}. Tengo {} años. Soy {}. Vivo en {}.'.format(nombre, apellido, edad, trabajo, pais)
print(frase) # Soy Alejandra Palomo. Tengo 35 años. Soy profesora. Vivo en Portugal.

radio = 10
pi = 3.14
area = pi * radio ** 2
result = 'El área de un círculo de radio {} es {}'.format(str(radio), str(area))
print(result) # El área de un círculo de radio 10 es 314

index()

Devuelve el índice más bajo de una subcadena, los argumentos adicionales indican el índice inicial y final (predeterminado 0 y longitud de cadena – 1). Si no se encuentra la subcadena, genera un valueError.

mi_string = 'métodos de cadena que nos permiten formatear strings'
sub_cadena = 'en'
print(mi_string.index(sub_cadena))  # 14
print(mi_string.index(sub_cadena, 33)) # error

rindex()

Devuelve el índice más alto de una subcadena, los argumentos adicionales indican el índice inicial y final (predeterminado 0 y longitud de la cadena – 1).

mi_string = 'métodos de cadena que nos permiten formatear strings'
sub_cadena = 'en'
print(mi_string.rindex(sub_cadena))  # 32
print(mi_string.rindex(sub_cadena, 33)) # error

isalnum()

Comprueba caracteres alfanuméricos.

mi_string = 'métodosdecadenaquenospermitenformatearstrings'
print(mi_string.isalnum()) # Verdadero

mi_string = '85métodosdecadena'
print(mi_string.isalnum()) # Verdadero

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.isalnum()) # Falso, el espacio no es un carácter alfanumérico

mi_string = '85 métodos de cadena que nos permiten formatear strings'
print(mi_string.isalnum()) # Falso

isalpha()

Comprueba si todos los elementos de cadena son caracteres alfabéticos (az y AZ).

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.isalpha()) # Falso, el espacio vuelve a estar excluido
mi_string = 'métodosdecadenaquenospermitenformatearstrings'
print(mi_string.isalpha()) # Verdadero
numero = '123'
print(numero.isalpha()) # Falso

isdecimal()

Comprueba si todos los caracteres de una cadena son decimales (0-9).

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.esdecimal()) # Falso
mi_string = '123'
print(mi_string.isdecimal()) # Verdadero
mi_string= '\u00B2'
print(mi_string.isdecimal()) # Falso
mi_string = '12 3'
print(mi_string.isdecimal()) # Falso, espacio no permitido

isdigit()

Comprueba si todos los caracteres de una cadena son números (0-9 y algunos otros caracteres Unicode para números).

string = 'Treinta'
print(string.isdigit()) # Falso
string = '30'
print(string.isdigit()) # Verdadero
string = '\u00B2'
print(string.isdigit()) # Verdadero

isnumeric()

Comprueba si todos los caracteres de una cadena son números o están relacionados con números (al igual que isdigit(), solo acepta más símbolos, como ½)

numero = '10'
print(numero.isnumeric()) # Verdadero
numero = '\u00BD' # ½
print(numero.isnumeric()) # Verdadero
numero = '10.5'
print(numero.isnumeric()) # Falso

isidentifier()

Comprueba si un identificador es válido – comprueba si una cadena es un nombre de variable válido.

identificador = '30DiasDePython'
print(identificador.isidentifier()) # Falso, porque empieza por un número
identificador = 'treinta_días_de_python'
print(identificador.isidentifier()) # Verdadero

islower()

Comprueba si todos los caracteres del alfabeto de la cadena están en minúsculas.

string = 'treinta días de python'
print(string.islower()) # Verdadero
string = 'Treinta días de python'
print(string.islower()) # Falso

isupper()

Comprueba si todos los caracteres del alfabeto de la cadena están en mayúsculas.

string = 'treinta días de python'
print(string.isupper()) # Falso
string = 'TREINTA DÍAS DE PYTHON'
print(string.isupper()) # Verdadero

join()

Devuelve una cadena concatenada.

web_leng = ['HTML', 'JavaScript', 'CSS']
resultado = ' '.join(web_leng)
print(web_leng)
print(resultado) # 'HTML CSS JavaScript React
web_leng = ['HTML', 'JavaScript', 'CSS']
result = '# '.join(web_leng)
print(result) # 'HTML# JavaScript# CSS'

strip()

Elimina todos los caracteres dados empezando por el principio y el final de la cadena. Si no se introduce parámetro elimina los espacios que hay en la cadena. Ideal para limpiar strings.

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.strip('métings')) # 'odos de cadena que nos permiten formatear str'

replace()

Reemplaza la subcadena con una cadena dada

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.replace('cadena', 'string')) # métodos de string que nos permiten formatear strings

split()

Divide la cadena y la almacena en una lista, utilizando la cadena dada o el espacio como separador

mi_string = '['métodos', 'de', 'cadena''
print(mi_string.split()) # ['métodos', 'de', 'cadena']
mi_string= 'méto,dos, de, cadena'
print(mi_string.split(', ')) # ['méto,dos', 'de', 'cadena']

title()

Devuelve una cadena de título en mayúsculas

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.title()) # Métodos De Cadena Que Nos Permiten Formatear Strings

swapcase()

Convierte todos los caracteres en mayúsculas a minúsculas y todos los caracteres en minúsculas a caracteres en mayúsculas

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.swapcase()) # MÉTODOS DE CADENA QUE NOS PERMITEN FORMATEAR STRINGS
mi_string= 'Métodos De Cadena Que Nos Permiten Formatear Strings'
print(mi_string.swapcase()) # mÉTODOS dE cADENA qUE nOS pERMITEN fORMATEAR sTRINGS

startswith()

Comprueba si la cadena comienza con la cadena especificada.

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.startswith('métodos')) # Verdadero

mi_string = 'métodos de cadena que nos permiten formatear strings'
print(mi_string.startswith('cadena')) # Falso
Scroll al inicio