Operaciones con cadenas de caracteres

Cadenas

PARTE 1

Un tipo de datos compuesto

Hasta ahora hemos utilizado cuatro tipos: int, float, bool y str. Las cadenas son cualitativamente diferentes de los otros cuatro tipos porque están hechas de piezas más pequeñas — los caracteres.

Los tipos que comprenden piezas mas pequeñas se llaman tipos de datos compuestos. Dependiendo de lo que hagamos, podemos tratar un tipo de datos compuesto como una única cosa o podemos acceder a sus partes. Esta ambigüedad es útil.

El operador corchete selecciona sólo un carácter de una cadena:

>>> fruta = "banana"
>>> letra = fruta[1]
>>> print( letra)

La expresión fruta[1] selecciona el carácter número 1 de fruta. La variable letra apunta al resultado. Cuando mostramos letra, nos encontramos con una sorpresa:

a

La primera letra de "banana" no es a. A no ser que usted sea un programador. Por perversas razones, los científicos de la computación siempre empiezan a contar desde cero. La 0-ésima letra (“cero- ésima”) de "banana" es b. La 1-ésima (“uno- ésima”) es a, y la 2-ésima (“dos-ésima”) letra es n.


A la expresión entre corchetes se le llama índice. Un índice identifica a un miembro de un conjunto ordenado, en este caso el conjunto de caracteres de la cadena. El índice indica cuál quiere usted, de ahí el nombre. El índice puede ser cualquier expresión entera.

Si usamos índices negativos, empieza a contar desde el final de la cadena, siendo -1 el último carácter del string.

cadena = "Hola Mundo"

# Saca por pantalla la 'a' de 'Hola Mundo'
print (cadena[3])

# Saca por pantalla el último carácter, la 'o'
print (cadena[-1])

Longitud de un string

La función len de Python nos permite saber la longitud de una cadena.

cadena = "Hola Mundo"

print ( len(cadena) )     # Saca 10, que es la longitud de la cadena

 

Extraer substring

Podemos extraer una parte del string usando la notación de corchetes con dos índices [inicio:fin]. La notación [:fin] es desde el primer carácter hasta el carácter fin. La notación [inicio:] indica desde el carácter inicio hasta final de string. Si usamos índices negativos, se cuenta desde el final de la cadena hacia el principio. Por ejemplo, el índice -1 es el último carácter. Veamos código de ejemplo de todo esto

cadena = "Hola Mundo"

# Saca por pantalla 'ol'
print (cadena[1:3])

#Saca por pantalla 'Hol'
print (cadena[:3])

# Saca por pantalla ' Mundo' (con el espacio delante)
print (cadena[4:])

# Saca por pantalla 'un'
print (cadena[-4:-2])

# Saca por pantalla 'undo'
print (cadena[-4:])

# Saca por pantalla 'Hola Mun'
print (cadena[:-2])

Ejemplo: Dividir la cadena de caracteres   s=“Fundamentos

Code

Result

Descripción

s[2:5]

nda

Caracteres en los indices 2,3,4.

s[  :5]

Funda

Los primero 5 caracteres.

s[5:  ]

mentos

Caracteres desde el índice 5 al final.

s[ -2:  ]

os

Los últimos dos caracteres.

s[  :  ]

Fundamentos

Toda la cadena de caracteres.

s[ 1 : 7 : 2]

udm

Caracteres desde el índice 1 al 6, step 2.

s[  :  : -1]

sotnemadnuF

Un step negativo muestra al revese el string.

 

Las cadenas son inmutables

Es tentador usar el operador [] en el lado izquierdo de una asignación, con la intención de cambiar un carácter en una cadena. Por ejemplo:

saludo = "--Hola todo el mundo!"
saludo[2] = 'L'            # ¡ERROR!
print( saludo)

 

En lugar de presentar la salida --Lola todo el mundo!, este código presenta el siguiente error en tiempo de ejecución TypeError: 'str' object does not support item assignment.

Las cadenas son inmutables, lo que significa que no puede cambiar una cadena existente. Lo más que puede hacer es crear una nueva cadena que sea una variación de la original:

saludo = "--Hola todo el mundo!"
nuevoSaludo = '--' + 'L' + saludo[3:]
print nuevoSaludo

Aquí la solución es concatenar -- y una nueva primera letra a una porción de saludo. Esta operación no tiene efecto sobre la cadena original.

 

Saber si un string contiene un substring o carácter : in

Podemos usar el operador in de Python para saber si una cadena contiene una determinada subcadena o un carácter concreto. Veamos un ejemplo

cadena = "Hola Mundo"

# Sacan True por pantalla.
print ( "o" in cadena )
print ( "Hola" in cadena )

# Sacan False por pantalla.
print ( "p" in "Hola Mundo" )
print ( "Pepe" in "Hola Mundo" )


PARTE 2

Métodos para manejar cadena de caracteres

Buscar un substring en el string : find

El método find de string nos permite buscar una subcadena dentro de la cadena. Este método admite hasta tres parámetros. La cadena a buscar, el índice a partir del cual empezar a buscar y el índice a partir del cual dejar de buscar. Nos devuelve la posición en donde ha encontrado la cadena, o -1 si no la encuentra. Veamos ejemplos

cadena = "Hola Mundo"

print(cadena.find("Hola"))        # Devuelve posición 0
print(cadena.find("Mundo"))       # Devuelve posición 5

print(cadena.find("Hola", 3))     # Devuelve -1, a partir de la posición 3 de "Hola Mundo" no hay ningún "Hola"
print(cadena.find("Mundo", 3))    # Devuelve 5, a partir de la posición 3 de "Hola Mundo" hay un "Mundo".

print(cadena.find("Hola", 0, 5))  # Devuelve 0, hay un "Hola" entre la posición 0 y 5 de "Hola Mundo".
print(cadena.find("Mundo", 0, 5)) # Devuelve -1, no hay un "Mundo" entre la posición 0 y 5 de "Hola Mundo".

find devuelve la primera posición en donde encuentra el substring dentro del string. Alternativamente, el método rfind nos devuelve la última posición donde encuentra el substring. También admite parámetros de índice de inicio y fin de búsqueda. Un ejemplo

cadena = "un uno, un dos, un tres"

print (cadena.find("un"))    # El primer "un" está en la posición 0, devuelve 0
print (cadena.rfind("un"))   # El último "un" está en la posición 16, devuelve 16

Reemplazar substring en string : replace

El método replace nos permite obtener una copia de la cadena original (no reemplaza en la cadena original) en la que se reemplaza el substring que se le indique por uno nuevo. Admite tres parámetros, el primero es el substring que tiene que buscar, el segundo es el nuevo substring que tiene que poner y el tercero, opcional, es cuántas veces tiene que hacer el reemplazo. Veamos ejemplos

cadena = "un uno, un dos, un tres"

print (cadena.replace("un", "XXX"))        # saca por pantalla "XXX XXXo, XXX dos, XXX tres"
print (cadena.replace("un", "XXX", 2))     # Sólo reemplaza 2 "un", así que saca por pantalla "XXX XXXo, un dos, un tres"

Otros métodos de cadenas

  • count: Devuelve cuántas veces aparece sub en la cadena

cadena = "un uno, un dos, un tres"

cuenta = cadena.count("un")

print(cuenta)

  • endswith:Devuelve verdadero si la cadena finaliza con el sufijo suffix especificado, en caso contrario falso
  • startswith:Devuelve verdadero si la cadena comienza por prefix, en caso contrario, devuelve falso.
  • Funciones de formato:capitalize,lower, upper, swapcase, title,strip
  • Funciones verificar contenido: isupper, islower, isdigit, isalpha, isalnum,isdecimal

Lista de métodos de manejo de cadenas (Enlaces a un sitio externo.)

 

REFERENCIAS:

http://chuwiki.chuidiang.org/index.php?title=String_en_Python (Enlaces a un sitio externo.)

http://www.openbookproject.net/thinkcs/archive/python/spanish2e/cap07.html (Enlaces a un sitio externo.)