Secuencias - Universidad de Costa Rica

Anuncio
Universidad de Costa Rica | Escuela de Ingeniería Eléctrica
IE-0117 Programación Bajo Plataformas Abiertas
Secuencias
En Python, una secuencia es un objeto (o variable) que sirve como un contenedor para otros objetos. Las secuencias
son ordenadas, cada uno de los objetos almacenados tiene una posición definida dentro de la secuencia. Las listas, las
tuplas y las cadenas de caracteres son tres tipos de datos considerados como secuencias en Python.
1.
Las listas
Una lista es una secuencia mutable. Esto significa que los contenidos de una lista pueden ser modificados, cambiando,
agregando o eliminando elementos.
Al igual que otras variables en Python, las listas se crean al momento de declararlas:
lista = [1, 2, 3, 4, 5, 6]
Pueden crearse listas vacías:
lista_vacia = []
Una lista puede contener elementos de distinto tipo, e incluso otras secuencias:
lista = [1, "dos", u'áéíóú', 2+5j, [10, 20, 30]]
2.
Las tuplas
Al igual que las listas, las tuplas son colecciones ordenadas de objetos. Sin embargo, a diferencia de las listas, las
tuplas son inmutables: una vez creadas no pueden modificarse.
Las tuplas se crean de forma similar a las listas:
tupla1 = (1, 2, 3, 4, 5)
tupla2 = 'uno', 'dos', 'tres', 'cuatro', 'cinco'
Si se quiere crear tuplas de un sólo elemento no bastan los paréntesis, debe agregarse una coma luego del elemento:
tupla_uno1 = ('alfa',)
tupla_uno2 = 'beta',
# Pueden omitirse los paréntesis
Las tuplas son estructuras de datos bastante simples. Generalmente se usan cuando es necesario agrupar varios
valores o variables:
print 'x1 = %f - x2 = %f' % (x1, x2)
3.
Las cadenas de caracteres
Las cadenas de caracteres también son consideradas secuencias. Cada carácter tiene una posición específica dentro
de la cadena y puede accederse de forma independiente. Al igual que las tuplas, las cadenas de caracteres son inmutables.
1
IE-0117 Programación Bajo Plataformas Abiertas
Secuencias
Existen dos tipos de datos que permiten manejar cadenas de caracteres en Python: las cadenas convencionales (tipo
donde cada carácter tiene un tamaño de 8 bits y las cadenas unicode (tipo unicode) en las que cada carácter se
almacena usando el sistema de codificación universal Unicode1 . El uso de cadenas unicode permite garantizar que los
caracteres podrán visualizarse correctamente, sin importar la codificación usada en el sistema. Para más información
puede consultar el HOWTO de Unicode de Python2 .
str),
c1 = 'Esto es una cadena'
c2 = u'Esto es una cadena Unicode'
Las cadenas, tanto convencionales como unicode pueden crearse usando comillas simples ('cadena'), comillas dobles
("cadena") o bien tres comillas (dobles o simples) al inicio y al final. Si se usa esta última opción pueden usarse saltos de
línea dentro de la comilla:
cadena = """
Esta es una cadena
que tiene varias líneas.
Por eso se usan tres comillas
"""
Al igual que en otros lenguajes como C, C++ o Java es posible utilizar secuencias de escape para representar caracteres
especiales como el salto de línea («\n») o la tabulación («\t»). La lista completa de las secuencias de escape disponibles
en Python puede encontrarse en la documentación de referencia del lenguaje3 .
En algunas ocasiones puede ser útil ignorar las secuencias de escape al crear una cadena. En este caso puede utilizarse
una cadena sin procesar (raw string):
cadena = r'En esta cadena no se procesarán los \n ni los \t'
En el ejemplo anterior se crea una cadena sin procesar usando el prefijo r al declarar la cadena. Esto provoca que
las secuencias de escape «\n» y «\t» no sean convertidas. El contenido de la cadena será:
En esta cadena no se procesarán los \n ni los \t
3.1. Formateado de cadenas
Es posible componer nuevas cadenas a partir de variables utilizando el formateado de cadenas. Esta funcionalidad
permite controlar con precisión cómo se van a convertir a texto los valores almacenados en las variables. Por ejemplo,
se tiene el siguiente código:
a = 10
b = 2.567
cadena = "Las soluciones son a = %d y b = %.2f" % (a, b)
print cadena
El resultado de ejecutar estas líneas es:
Las soluciones son a = 10 y b = 2.57
En este caso, la operación de formateado de cadenas sustituye el código de formato %d en la cadena por el valore de
la primera variable de la tupla a la derecha del operador % (variable a) y el código %.2f por el valor de la segunda variable
de la tupla redondeado a 2 decimales (varible b). El código utilizado va a depender del tipo de datos de la variable. %d
1 http://unicode.org/
2 http://docs.python.org/howto/unicode.html
3 http://docs.python.org/reference/lexical_analysis.html#strings
2
IE-0117 Programación Bajo Plataformas Abiertas
Secuencias
representa un entero decimal, %f un número de punto flotante, %s una cadena de caracteres, etc. La lista completa de
códigos de formateado puede consultarse en la documentación de Python4 .
4.
Operaciones y métodos comunes a todas las secuencias
4.1. Acceso a los elementos de una secuencia
Los elementos almacenados en una secuencia pueden accederse usando el operador []:
lista = [1, 2, 3, 4, 5]
tupla = (10, 20, 30, 40, 50)
print lista[3] + tupla[0]
4.2. Particiones (slices)
El operador [] también permite extraer una porción de una lista, si se especifica un rango:
lista = ['a', 'b', 'c', 'd', 'e']
palabra = 'hipopotomonstrosesquipedaliofobia'
part1 = lista [1:3]
part2 = lista[:4]
part3 = lista[3:]
# part1 contiene ['b', 'c']
# part2 contiene ['a, 'b', 'c', 'd']
# part3 contiene ['d', 'e']
part4 = palabra[:3]
part5 = palabra[5:10]
part6 = [-5:]
# part4 contiene "hip"
# part5 contiene "otomo"
# part6 contiene "fobia"
Si se usan valores negativos para los límites del ámbito, la cuenta se hace desde el final de la secuencia.
4.3. La función len()
La función len() es una función integrada de Python que retorna el tamaño de una secuencia o diccionario:
lista = [10, 20, 30, 40, 50, 60]
cadena = "En un lugar de La Mancha de cuyo nombre no quiero acordarme"
print len(lista)
print len(cadena)
# imprime 6
# imprime 59
4 http://docs.python.org/library/stdtypes.html#string-formatting-operations
3
IE-0117 Programación Bajo Plataformas Abiertas
Secuencias
4.4. Los operadores 'in' y 'not in'
Es posible comprobar si un elemento se encuentra o no en una secuencia usando los operadores ’in’ o ’not in’:
primos = [1, 2, 3, 5, 7, 11]
numero = int(raw_input("Ingrese un número: "))
if numero in primos:
print "El número es primo"
else:
print "El número no es primo"
vocales = 'aeiou'
letra = raw_input("Escriba una letra: ")
if letra not in vocales:
print "La letra ingresada no es una vocal"
else:
print "La letra ingresada es una vocal"
4.5. Iteración a través de los elementos de una secuencia
En Python, el lazo for permite iterar a través de los elementos de una lista:
lista = [1, 2, 3, 4, 5]
suma = 0
for i in lista:
suma += i
print suma
# Imprime '15'
4.6. Concatenación de secuencias
El operador suma (+) permite concatenar (unir) dos secuencias:
tup1 = (1, 2, 3)
tup2 = (4, 5, 6)
ntup = tup1 + tup2
# ntup contiene (1, 2, 3, 4, 5, 6)
cad1 = "hola"
cad2 = "mundo"
ncad = cad1 + cad2
# ncad contiene "holamundo"
4
IE-0117 Programación Bajo Plataformas Abiertas
Secuencias
4.7. Repetición de secuencias
El operador multiplicación * permite repetir una secuencia un número determinado de veces:
lista = ['uno', 'dos']
nlista = lista * 2
# nlista contiene ['uno', 'dos', 'uno', 'dos']
cadena = "Blah"
ncadena = cadena * 5
4.8.
# ncadena contiene "BlahBlahBlahBlahBlah"
Desempaquetado de secuencias
Es posible almacenar los valores contenidos en una secuencia dentro de variables escalares a través de una simple
asignación:
lista = [0.565, 7.344, -9.343]
x, y, z = lista
# Ahora x = 0.565, y = 7.344 y z = -9.343
Si la cantidad de valores en la lista es diferente a la cantidad de variables proporcionadas al lado izquierdo de la
asignación, se producirá un error.
4.9. Métodos presentes en las secuencias
Existen 2 métodos soportados en la mayoría de las secuencias (list, tuple, str y unicode):
count(valor):
retorna un entero con la cantidad de apariciones de valor dentro de la secuencia.
index(valor):
retorna el índice de la primera aparición de valor dentro de la lista.
5.
Operaciones específicas de las listas
5.1. Borrado de elementos de una lista
Es posible eliminar elementos de una lista usando el enunciado del:
lista = [10, 20, 30, 40, 50]
del lista[1]
# lista ahora es [10, 30, 40, 50]
5.2. Métodos de listas
Algunos de los métodos disponibles en un objeto lista son los siguientes:
append(elemento):
inserta elemento al final de una lista
lista = [1, 2, 3, 4, 5]
lista.append(100) # lista ahora contiene [1, 2, 3, 4, 5, 100]
5
IE-0117 Programación Bajo Plataformas Abiertas
pop():
Secuencias
elimina y retorna el último elemento de una lista
lista = ['uno', 'dos', 'tres', 'cuatro', 'cinco']
a = lista.pop() # lista ahora es ['uno', 'dos', 'tres', 'cuatro'];
# a = 'cinco'
insert(pos, elemento):
remove(elemento):
sort():
inserta elemento en la posición pos de una lista
elimina la primera aparición de elemento de la lista
ordena la lista
reverse():
invierte el orden de los elementos de la lista
5.3. Copia de listas
Cuando se asigna una lista a otra variable no se crea una copia nueva, sino que la nueva variable se convierte en un
alias para el mismo conjunto de datos:
a = [1, 2, 3, 4, 5, 6, 7, 8]
b = a
En el ejemplo, cualquier modificación que se haga en b se hará también en a, debido a que ambas variables se refieren
a los mismos datos.
Si se quiere una hacer una copia real debe obtenerse una partición que incluya la lista completa:
a = [1, 2, 3, 4, 5, 6, 7, 8]
b = a[:]
6.
Operaciones específicas de las cadenas
Existen varios métodos disponibles en los objetos del tipo str o unicode que permiten modificar o realizar pruebas
sobre cadenas de caracteres. Debe recordarse que las cadenas son objetos inmutables, por lo que los métodos no
modifican la cadena original sino que retornan una nueva cadena.
Algunos de los métodos disponibles son:
capitalize():
Retorna una copia de la cadena con la primera letra en mayúscula y el resto en minúscula.
upper():
Retorna una copia de la cadena con todas las letras en mayúscula.
lower():
Retorna una copia de la cadena con todas las letras en minúscula.
isalpha():
Retorna verdadero si todos los caracteres de la cadena son letras.
isdigit():
Retorna verdadero si todos los caracteres de la cadena son dígitos.
join(secuencia):
Retorna una nueva cadena con todos los elementos del objeto iterable secuencia unidos por el o los
caracteres contenidos en la cadena.
6
IE-0117 Programación Bajo Plataformas Abiertas
Secuencias
Por ejemplo, si se tiene la secuencia a = [1, 2, 3, 4, 5] puede aplicarse el método join() sobre distintas cadenas
como se muestra a continuación:
cadena1 = '.'.join(a)
cadena2 = ':'.join(a)
cadena3 = '//'.join(a)
split(delimitador):
rador. Ejemplos:
# cadena1 es '1.2.3.4.5'
# cadena2 es '1:2:3:4:5'
# cadena2 es '1//2//3//4//5'
Retorna una lista con el contenido de la cadena, separado en cada aparición de la cadena sepa-
cadena1 = 'a b c d e'
lista1 = cadena1.split(' ')
# lista1 es ['a', 'b', 'c', 'd', 'e']
cadena2 = 'www-data:x:33:33:www-data:/var/www:/bin/sh'
lista2 = cadena2.split(':')
# lista2 es ['www-data', 'x', '33', '33', 'www-data',
#
'/var/www', 'bin/sh']
La lista completa de métodos puede encontrarse en la documentación de Python5 .
7.
La función range()
La función range() retorna una lista con todos los valores dentro del ámbito especificado, utilizando un paso predeterminado de 1 entre cada valor:
lista = range(1, 10) # lista es [1, 2, 3, 4, 5, 6, 7, 8, 9]
lista = range(5)
# lista es [0, 1, 2, 3, 4]
El paso puede modificarse pasando un tercer argumento a la función:
lista = range (10, 100, 10)
# lista contiene [10, 20, 30, 40, 50, 60, 70, 80, 90]
8.
Comprensión de listas
La comprensión de listas permite aplicar principios de programación funcional para aplicar operaciones a todos los
elementos de una lista.
Por ejemplo, si se desea crear una lista que contenga el cuadrado de los elementos de una lista original, puede hacerse
tradicionalmente usando un for:
orig = [1, 2, 3, 4, 5]
cuad = []
for x in orig:
cuad.append(x * x)
print cuad
# imprime [1, 4, 8, 16, 25]
Usando comprensión de listas, esto podría hacerse de la siguiente forma:
orig = [1, 2, 3, 4, 5]
cuad = [x * x for x in orig]
print cuad
# imprime [1, 4, 8, 16, 25]
5 http://docs.python.org/library/stdtypes.html#string-methods
7
IE-0117 Programación Bajo Plataformas Abiertas
Secuencias
Es posible usar el enunciado if para seleccionar sólo ciertos elementos de la lista:
orig = range(1, 10)
nueva_lista = [i * 10 for i in orig if i % 2 == 0]
print nueva_lista
# imprime [20, 40, 60, 80]
8
Documentos relacionados
Descargar