- 1. Operaciones de secuencia
- 2. Operadores aritméticos con cadenas
- 3. Inmutabilidad
- 4. Métodos internos de la clase cadena
- 5. Obteniendo ayuda
- 6. Secuencias de escape
- 7. Prueba tu mismo ahora
- 8. Enlaces externos
Las cadenas son carácteres delimitados por “ o ‘, no son más que texto encerrado entre comillas simples ( ‘cadena’ ) o dobles ( “cadena” ). Las cadenas son nuestros primer ejemplo de lo que en Python llamamos una secuencia: una colección ordenada posicionalmente de otros objetos Las secuencias mantienen un orden de izquierda a derecha entre los elementos que contienen: sus elementos se almacenan y obtienen por sus posiciones relativas. Estrictamente hablando, las cadenas son secuencias de cadenas de un carácter; otros tipos de secuencias más generales incluyen listas y tuplas, cubiertas más adelante.
$ python
Python 3.7.3 (default, Jul 25 2020, 13:03:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> soy una cadena
File "<stdin>", line 1
soy una cadena
^
SyntaxError: invalid syntax
>>> "soy una cadena"
'soy una cadena'
>>> 'otra cadena'
'otra cadena'
>>>
La posibilidad de usar tanto comillas simples como dobles flexibilidad le permite usar comillas y apóstrofes dentro de la cadena, así:
'I told my friend, "Python is my favorite language!"'
"The language 'Python' is named after Monty Python, not the snake."
"One of Python's strengths is its diverse and supportive community."
Podemos definir cadenas largas de varias líneas con ''':
>>> cad='''cadena
... varias
... lineas'''
>>> print(cad)
cadena
varias
lineas
>>> type(cad)
<type 'str'>
1. Operaciones de secuencia
Como secuencias, las cadenas admiten operaciones que asumen un orden posicional entre elementos. Por ejemplo, si tenemos una cadena de cuatro caracteres codificada entre comillas podemos obtener su longitud con la función len incorporada y buscar su componentes con expresiones de indexación:
>>> S = 'Spam'
>>> len(S)
4
Podemos acceder a sus elementos como una lista o tupla:
>>> var_str='cadena'
>>> var_str[0]
'c'
>>> print(var_str[0])
En Python, los índices comienzan desde 0: el primer elemento está en el índice 0, el segundo está en el índice 1, y así sucesivamente (!!!).
En Python, también podemos indexar hacia atrás, desde el final: los índices positivos cuentan desde la izquierda y los índices negativos cuentan hacia atrás desde la derecha:
>>> print(S)
Spam
>>> S[-1]
'm'
>>> S[-2]
'a'
Formalmente, simplemente se agrega un índice negativo a la longitud de la cadena, por lo que los siguientes dos operaciones son equivalentes (aunque la primera es más fácil de codificar y menos fácil de equivocarse):
>>> S[-1]
'm'
>>> S[len(S)-1]
'm'
Además de la indexación posicional simple, las secuencias también admiten una forma más general de indexación conocida como slicing, que es una forma de extraer una sección completa (slice) en una sola paso. Por ejemplo:
>>> S
'Spam'
>>> S[1:3]
'pa'
En un sector, el límite izquierdo por defecto es cero, y el límite derecho por defecto es la longitud de la secuencia que se está cortando. Esto lleva a algunas variaciones de uso comunes:
>>> S[1:] # Everything past the first (1:len(S))
'pam'
>>> S # S itself hasn't changed
'Spam'
>>> S[0:3] # Everything but the last
'Spa'
>>> S[:3] # Same as S[0:3]
'Spa'
>>> S[:-1] # Everything but the last again, but simpler (0:-1)
'Spa'
>>> S[:] # All of S as a top-level copy (0:len(S))
'Spam'
2. Operadores aritméticos con cadenas
Podemos sumar cadenas con ‘+’ o multiplicarlas con ‘*‘.
>>> x = 'uno' + ' dos' + ' tres'
>>> print(x)
uno dos tres
>>> print(x*2)
uno dos tresuno dos tres
El signo más (+) significa diferentes cosas para diferentes objetos: suma para números y concatenación de cadenas. Esta es una propiedad general de Python que llamamos polimorfismo; en resumen, el significado de una operación depende de los objetos que se operan. La propiedad de polimorfismo explica gran parte de la flexibilidad del código de Python.
3. Inmutabilidad
También observe en los ejemplos anteriores que no estábamos cambiando la cadena original con cualquiera de las operaciones que ejecutamos en él. Cada operación de cadena se define para producir una nueva cadena como su resultado, porque las cadenas son inmutables en Python, no se pueden cambiar en su lugar después de que se crean. En otras palabras, nunca puede sobrescribir los valores de objetos inmutables. Por ejemplo, no puede cambiar una cadena asignándola a uno de sus posiciones, pero siempre puede crear una nueva y asignarle el mismo nombre. Porque Python limpia objetos antiguos a medida que avanza (como verá más adelante), esto no es tan ineficiente como puede sonar:
>>> S = 'Spam'
>>> S
'Spam'
>>> S[0]='z'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> S = 'z' + S[1:]
>>> S
'zpam'
Cada objeto en Python se clasifica como inmutable o no. En términos de los tipos principales, los números, cadenas y tuplas son inmutables; listas, diccionarios y los conjuntos no lo son.
4. Métodos internos de la clase cadena
Además de las operaciones de secuencia genéricas, las cadenas también tienen operaciones propias, disponibles como métodos—funciones que se adjuntan y actúan sobre un objeto, que se activan con una expresión de llamada.
Las cadenas están representadas por dos clases str y unicode. Podemos acceder a los métodos internos de una clase, por ejemplo:
>>> var_str = 'cadena'
>>> var_str.capitalize()
'Cadena'
>>> var_str.find('ad')
1
>>> var_str.replace('en','XYZ')
'cadXYZa'
Otros métodos dividen una cadena en subcadenas en un delimitador (útil como una forma simple de análisis), realizar conversiones de mayúsculas y minúsculas, probar el contenido de la cadena (dígitos, letras, etc.) y elimine los espacios en blanco de los extremos de la cadena:
>>> line='aaa,bbbbbb,cccc,dd'
>>> line.split(',')
['aaa', 'bbbbbb', 'cccc', 'dd']
>>> S = 'spam'
>>> S.upper() # S.lower() hace lo opuesto
'SPAM'
>>> S.isalpha()
True
Para imprimir una cadena con el valor de una variable dentro:
my_int = 10
print(f"My int is: {my_int}")
Para indicar que un string en Python contendrá variables a ser sustituidas debemos anteceder el caracter “f”.
Podemos hacer lo mismo recurriendo al método format().
entero = 12
cadena = "Mi entero es: {}"
print(cadena.format(entero))
Más ejemplos de impresión de cadenas formateadas:
>>> print("Su pelo era blanco como la {} de la cima del monte {}.".format('nieve','everest'))
Su pelo era blanco como la nieve de la cima del monte everest.
>>> print("*" * 5)
*****
>>> c1,c2,c3,c4='H','o','l','a'
>>> print(c1+c2+c3+c4)
Hola
Ahora prueba con esto:
formatter = "{} {} {} {}"
print(formatter.format(1, 2, 3, 4))
print(formatter.format("one", "two", "three", "four"))
print(formatter.format(True, False, False, True))
print(formatter.format(formatter, formatter, formatter,
formatter))
print(formatter.format(
"Try your",
"Own text here",
"Maybe a poem",
"Or a song about fear"
))
5. Obteniendo ayuda
Los métodos presentados en la sección anterior son una muestra representativa, pero pequeña, de lo que está disponible para los objetos de cadena. Para obtener más detalles, siempre puede llamar a la función dir incorporada. Este función enumera las variables asignadas en el alcance de la persona que llama cuando se llama sin argumento; más útil, devuelve una lista de todos los atributos disponibles para cualquier objeto que se le pase. Debido a que los métodos son atributos de función, aparecerán en esta lista. Suponiendo que S es aún la cadena, aquí están sus atributos en Python 3.3 (Python 2.X varía ligeramente):
>>> dir(S)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
La función dir simplemente proporciona los nombres de los métodos. Para preguntar qué hacen, puedes pasar a la función de ayuda:
>>> help(S.replace)
6. Secuencias de escape

Ejemplo:
>>> print("línea1\nlínea2\nlínea3")
línea1
línea2
línea3
>>> cadena_tab = "\tEstoy tabulada."
>>> print(cadena_tab)
Estoy tabulada.
7. Prueba tu mismo ahora
- Mensaje personal: almacene el nombre de una persona en una variable e imprima un mensaje a esa persona. Su mensaje debe ser simple, como, “Hola Iker, ¿Te gustaría aprender algo de Python hoy?”.
- Casos de nombres: almacene el nombre de una persona en una variable y luego imprima esa persona en minúsculas, mayúsculas y capitalizado.
- Cita famosa: encuentra una cita de una persona famosa que admires. Imprime la cita y el nombre de su autor. Su salida debe parecerse a la siguiente, incluyendo las comillas: Albert Einstein dijo una vez: “Una persona que nunca hizo una error nunca probé nada nuevo.”
- Cita famosa 2: Repita el ejercicio 2-5, pero esta vez guarde el nombre en una variable llamada persona_famosa. Luego redacta tu mensaje y almacenarlo en una nueva variable llamada mensaje. Imprime tu mensaje.
Eliminación de nombres: almacene el nombre de una persona e incluya algunos espacios en blanco caracteres al principio y al final del nombre. Asegúrese de usar cada combinación de caracteres, “\t” y “\n”, al menos una vez. Imprima el nombre una vez, de modo que se muestre el espacio en blanco alrededor del nombre. Luego imprima el nombre usando cada una de las tres funciones de eliminación, lstrip() , rstrip() y strip().
nombre = "Iker" print("Hola",nombre,", que tal") # Forma fácil print(f"Hola {nombre}, que tal") print("Hola {}".format(nombre),", que tal")nombre = "iker" print(nombre.lower()) print(nombre.upper()) print(nombre.capitalize())print('Roy Batty dijo en Blade Runner \"I\'ve seen things you people wouldn\'t believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhäuser Gate. All those moments will be lost in time, like tears in the rain. Time to die.\". FIN')persona_famosa = "Roy Batty" mensaje = persona_famosa + ' dijo en Blade Runner "I\'ve seen things you people wouldn\'t believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhäuser Gate. All those moments will be lost in time, like tears in the rain. Time to die.". FIN' print(mensaje)cadena = " Cadena con espacios. Salto de línea\n \tSigue en otra línea tabulada " print(cadena) print(cadena.lstrip()) print(cadena.rstrip()) print(cadena.strip()) #por ambos lados