Tema 5: Cadenas

Compartir en:
Haz clic aquí para ver la videoclase

Contenidos

Referencia principal: Capítulo 6 de Severance, C. R. (2016). Python for everybody: Exploring data using Python 3. Ann Arbor, MI: Charles Severance.

Cadenas

Una cadena es una secuencia de caracteres. Esto quiere decir que no es un tipo de dato simple. Podemos acceder a los caracteres de una cadena mediante subíndices:

1fruta = 'platano'
2
3print(fruta[2])
4
5print(fruta[-1])
a
o


Como ves, podemos acceder a posiciones dentro de secuencias de elementos en una variable indicando su índice entre corchetes. Si indicamos un número negativo, el cálculo se hace desde el final de la cadena.

Las secuencias de elementos también se pueden contar con la función len(), que nos devuelve un entero con el número de elementos:

1fruta = 'banana'
2
3print(len(fruta))
6


Debemos tener en cuenta que los índices de posición en Python comienzan en 0:

Fig. 1: índices y posiciones en Python (Severance, 2016, p. 68)


Observa cómo la longitud de 'banana' es 6, pero su último índice es 5. Por este motivo, para obtener el último elemento de una secuencia, no debemos ejecutar la expresión fruta[len(fruta)] sino fruta[len(fruta)-1].

1fruta = 'banana'
2
3fruta[len(fruta)-1]
'a'


Inmutabilidad

En programación hablamos de datos mutables e inmutables según podamos o no alterar si integridad. Las cadenas son inmutables, puesto que no podemos acceder a sus componentes y modificarlos. Observa el siguiente fragmento en el que vamos a intentar cambiar el segundo elemento de la cadena 'banana' por una 't'.


1fruta = 'banana'
2
3fruta[1] = 't'
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-7-8a4f5b4d9f72> in <module>()
      1 fruta = 'banana'
----> 2 fruta[1] = 't'


TypeError: 'str' object does not support item assignment

Otros tipos de datos que veremos más adelante son mutables.


Slicing

Llamamos slicing al proceso por el que extraemos un subsegmento de una secuencia. Para extraer un segmento debemos indicar usando los corchetes de subíndice los índices de las posiciones del primer y último segmento separados por :.

1# Severance, 2016, p. 69
2
3s = 'Monty Python'
4
5print(s[0:5])
6
7print(s[6:12])
Monty
Python


Si no especificamos el índice inicial, se extraen los subsegmentos desde el comienzo de la secuencia. Si no indicamos el índice final, se extraen hasta el final:

1# Severance, 2016, p. 69
2
3fruit = 'banana'
4
5fruit[:3]
6
7fruit[3:]
'ana'


Podemos recorrer los elementos de una cadena mediante bucles:

1for letra in fruta:
2
3  print(letra)
b
a
n
a
n
a


Hemos visto cómo funciona el operador in en combinación con for. Sin embargo, in también puede utilizarse en solitario. Se trata de un operador booleano que evalúa la presencia de un valor en una secuencia:

1print('ban' in 'banana')
2
3print('seed' in 'banana')
True
False


Objetos y métodos

Los objetos, en programación, son instancias de conceptos abstractos que tienen unas propiedades en común. Una cadena es un tipo de objeto. Cuando declaramos una secuencia de caracteres entre comillas, Python crea un objeto del tipo cadena. Como instancia del tipo cadena, esa variable tendrá las propiedades típicas de una cadena: ser una sucesión de caracteres, tener longitud, etc. Los objetos tienen una serie de métodos asociados. Son las funciones que típicamente se aplican a ese objeto en virtud de sus propiedades.


Las funciones que hemos visto hasta ahora eran una palabra clave a la que le añadíamos algo entre paréntisis y eso producía un resultado. La sintaxis de los métodos es diferente. Como son funciones propias del mismo objeto, se declaran junto al objeto separadas por un punto. Por ejemplo, por sus propiedades de objeto, las cadenas pueden ponerse en mayúscula y tienen una función con ese fin. Observa cómo se hace.

1fruta = 'banana'
2
3print(fruta.upper())
BANANA


En el ejemplo hemos puesto en mayúscula la cadena utilizando la variable en la que la hemos almacenado, pero ya sabemos que una secuencia entre comillas, por sí mismo, es una cadena. Por ello, podemos utilizar los métodos con la propia cadena:

1print('banana'.upper())
BANANA


Estos son los principales métodos de cadena:

  • lower(): poner la cadena en minúscula.

  • capitalize(): poner la primera letra en mayúscula.

  • find(x): encontrar el índice de la secuencia x en la cadena.

  • strip(): Eliminar espacios en blanco antes y después de la cadena.

  • startswith(x)/endswith(x): La cadena empieza/termina por la secuencia.

  • split(): dividir la cadena por espacios en blanco y hacer una lista.


 1print('Banana'.lower())
 2
 3print('banana'.capitalize())
 4
 5print('banana'.find('b'))
 6
 7print('banana'.find('nana'))
 8
 9print('     banana '.strip())
10
11print('banana'.startswith('b'))
12
13print('banana'.startswith('ba'))
14
15print('banana'.startswith('na'))
16
17print('banana'.endswith('a'))
18
19print('banana'.endswith('na'))
20
21print('banana'.endswith('ba'))
22
23print('la banana es una fruta'.split())
banana
Banana
0
2
banana
True
True
False
True
True
False
['la', 'banana', 'es', 'una', 'fruta']