Python posee además de los tipos de datos básicos, otros tipos de datos más complejos. Se trata de las tuplas, las listas y los diccionarios.
Estos tres tipos, pueden almacenar colecciones de datos de diversos tipos y se diferencian por su sintaxis y por la forma en la cual los datos pueden ser manipulados.
SECUENCIAS: TUPLAS Y LISTAS
Tanto las tuplas como las listas son conjuntos ordenados de elementos.
Una tupla es una variable que permite almacenar datos inmutables (no pueden ser modificados una vez creados) de tipos diferentes. Las tuplas se encierran entre paréntesis.
Tienen longitud fija
Solo tiene una dimensión (*)
Una lista es similar a una tupla con la diferencia fundamental de que permite modificar los datos una vez creados. Las listas se encierran entre corchetes y además pueden ser de mútiples dimensiones
In [28]:
# Ejemplo de lista, los valores van entre corchetes
una_lista = [4, "Hola", 6.0, 99 ]
# Ejemplo de tupla, los valores van entre paréntesis
una_tupla = (4, "Hola", 6.0, 99)
print ("Lista: " , una_lista)
print ("Tupla: " , una_tupla)
# Las tuplas y las listas aceptan operadores de comparación y devuelven un booleano
print (una_lista == una_tupla)
In [29]:
# una_lista = [4, "Hola", 6.0, 99 ]
# una_tupla = (4, "Hola", 6.0, 99)
# Uso del operador IN
4 in una_lista, 5 not in una_tupla
Out[29]:
In [30]:
# Uso de la función LEN, que nos dice cuantos elementos componen una lista o una tupla
len(una_lista), len(una_tupla)
Out[30]:
In [31]:
# Uso de la funcion SORTED para ordenar los elementos de una lista/tupla
# Al ordenar la lista no la modifica, se crea una nueva; de ahí que tengamos que definir una variable para ejecutar la función
lista = [ 5, 6, 7, 1, 4, 2, 9 ]
otra = sorted(lista)
otra
Out[31]:
ACCESO A LOS ELEMENTOS DE UNA SECUENCIA
Los elementos de las secuencias pueden ser accedidos mediante el uso de corchetes [ ], como en otros lenguajes de programación.
Podemos indexar las secuencias utilizando la sintaxis [<inicio>:<final>:<salto>].
En Python, la indexación empieza por CERO
In [32]:
lista = [5, 3, 1, 6, 99]
print(lista)
# Mostrar el primer elemento
print(lista[0])
# Mostrar el tercer elemento
print(lista[2])
In [33]:
# Uso de la sintaxis [<inicio>:<final>:<salto>]
lista = [2, 9, 6, 4, 3, 71, 1, 32, 534, 325, 2, 6, 9, 0]
print(lista)
# Muestra 3 elementos, comenzando por el elemento situado en la posición 3 y
# terminando en el de la posición 6, con saltos de 1 elementos
# [3,6) es como se expresa en notación científica, donde el corchete incluye y el paréntesis excluye
print(lista[3:6:1])
# Muestra todos los elementos, desde el primero hasta el último, con saltos de 2 elementos
print(lista[::2])
# Se puede acceder a los elementos de una secuencia de manera inversa
print ( lista[-1] ) # El último elemento
print ( lista[-2] ) # El penúltimo elemento
Los elementos de las secuencias, tanto listas como tuplas, son hetereogéneos, así que es posible definir listas que contienen valores númericos y cadenas de caracteres, así como otras listas:
In [34]:
# Lista con valores heterogéneos
lista = ["A", 26, "lista", 9, -62]
lista2 = [1, 2, 3, 4]
lista3 = ["A", "B", "C", "D"]
# Lista que incluye otra lista, así como otros valores
lista4 = [lista2, [6, 98, "Abc"]]
print(lista4)
In [35]:
# Acceder a los elementos de una lista que a su vez está incluida en otra lista (una matriz o array)
# [acceso a la lista][acceso a la posición de dicha lista]
d = lista4[1][2]
print(d)
In [36]:
# Lista simple o de 1 dimensión
matriz1 = [
1, 2, 3,
4, 5, 6,
7, 8, 9,
]
# Acceso al elemento 3 de la lista
print("Valor A: ", matriz1[3])
# Lista de 3 dimensiones
matriz2 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# Acceso al elemento 1 de la segunda lista
print("Valor B: ", matriz2[2][0])
En el caso de las listas, podemos modificar los datos almacenados:
In [37]:
lista = [1, 2, 3, 4]
print ( "Antes: ", lista)
lista[0] = 0.0
print ("Después: ", lista)
In [38]:
print(matriz2)
matriz2[1] = [0,0,0]
matriz2
Out[38]:
In [4]:
# Con esta instrucción "matriz2.*?" nos muestra todas las posibilidades existentes:
# matriz2.append
# matriz2.clear
# matriz2.copy
# matriz2.count
# matriz2.extend
# matriz2.index
# matriz2.insert
# matriz2.pop
# matriz2.remove
# matriz2.reverse
# matriz2.sort
# Por ejemplo para añadir una lista a otra lista mediante la instrucción append.
# Se puede añadir sólo un valor, no es necesario añadir una lista entera
matriz = [[1,2,3],[4,5,6],[7,8,9]]
matriz.append(['A','B','C'])
print(matriz)
matriz.append(5)
matriz
Out[4]:
In [62]:
# Para quitar un elemento de la lista, se usa la instrucción remove
matriz.remove(5)
matriz
Out[62]:
Se pueden
concatenar
listas o tuplas mediante el operador +
In [66]:
# Ejemplo de concatenación de dos tuplas
# En el primer ejemplo se crea una tupla con dos tuplas concatenadas, definiendolas en la misma línea
tupla = (1,2,3) + ('a','b','c')
print(tupla)
# Creación de una tupla a partir de dos tuplas definidas previamente
tupla1 = (6,9,7,'abc')
tupla2 = (1,6,0,'def')
tupla_f = tupla1 + tupla2
tupla_f
Out[66]:
In [69]:
# Se pueden utilizar operadores matemáticos con las listas o tuplas
# A destacar que el uso de los operadores + y * no modifican las secuencias originales, sino que crean nuevas secuencias
tupla_m = tupla1 * 4
tupla_m
Out[69]:
DESEMPAQUETAR TUPLAS
En muchos casos es interesante asignar nombre a los elementos de las tuplas para, posteriormente, trabajar con esas variables.
In [70]:
# Se define una tupla llamada "laborales"
laborales = (1, 2, 3, 4, 5 )
# Se define una variable llamada "laborales" con una serie de valores para dicha tupla
# La definición de la variable puede hacerse antes de los valores o despues de los valores
lunes, martes, miercoles, jueves, viernes = laborales
# Si preguntamos por un valor de dicha variable nos devolverá su correspondencia dentro de la tupla
martes
Out[70]:
Mostramos otro ejemplo con tuplas anidadas:
In [72]:
# Creamos una tupla llamada "dias" anidando dos tuplas, una ya existente ("laborales") y otra que creamos al anidar (6,7)
dias = laborales, (6, 7)
# El resultado es una tupla de tuplas
dias
Out[72]:
In [79]:
# Crea la variable "dias" a partir de la variable "laborales", añadiendo dos valores nuevos (sabado, domingo)
laborales, (sabado, domingo) = dias
sabado
Out[79]:
LISTAS: CASOS PARTICULARES
Como hemos dicho anteriormente, las listas pueden tener longitud variable y son mutables. También hemos visto que pueden definirse mediante [ ].
Otra forma de definir las listas es mediante la función list.
In [81]:
# Definimos una tupla
tupla = (3, 4, 5)
# Mediante la función "list" creamos una lista a partir de la tupla anterior
lista = list(tupla)
lista
Out[81]:
In [82]:
# Se puede modificar una lista especificando la posición a modificar y un valor
lista[0] = None # valor nulo en Python
lista
Out[82]:
In [83]:
lista[0] = 3
lista
Out[83]:
AÑADIR Y ELEMINAR ELEMENTOS DE UNA LISTA
Aunque se pueden añadir elementos como hemos visto antes, la forma más eficiente es mediante el método
append
, que añade elementos al final de la lista. Otra forma de añadir elementos es mediante el método
insert
, que inserta un elemento en una determinada posición.
In [87]:
# Definimos una lista
lista = ['Lunes', 'Jueves']
print(lista)
# Mediante la instrucción "append(valor)" añadimos a dicha lista un valor
# Con append(valor) añadimos siempre el elemento al final de la lista
lista.append('Viernes')
print(lista)
In [88]:
# La instrucción "insert(posición,valor)" es similar a append(valor), con la salvedad de que nos permite añadir el elemento
# en la posición que nostros queramos
lista.insert(1, 'Martes')
print(lista)
lista.insert(2, 'Miércoles')
print(lista)
La operación
pop
permite eliminar el elemento de la lista que ocupa una determinada posición.
In [89]:
# Para usar la instrucción "pop(posición)" hay que definir una variable que realice dicha operación
# En este ejemplo borramos la posición 3 "Jueves"
borrar = lista.pop(3)
borrar
Out[89]:
In [90]:
# Verificamos que la lista ya no contiene el elemento "Jueves"
lista
Out[90]:
Pero puede darse el caso de que necesitemos eliminar un elemento de la lista y que no conozcamos la posición que ocupa. En esos casos utilizaremos el método
remove
.
In [91]:
lista.remove('Viernes')
lista
Out[91]:
ORDENAR LISTAS
El método sort permite ordenar una lista sin necesidad de crear una lista nueva, por lo que la operación es muy eficiente.
In [97]:
# Definimos una lista
lista = [5,7,2,0,4,7,1,5,4,3,4,1,9,0]
# Mediante el método "sort()" ordenamos la lista
lista.sort()
# Con "remove()" eliminamos un elemento especificando entre paréntesis el primer valor a eliminar, en caso de que haya dos
# o más elementos igules en la lista. La diferencia con "pop(posición)" es que si la lista no está ordenada eliminamos el primer
# elemento que coincida, con pop() podemos eliminar un elemento concreto.
print(lista)
lista.remove(0)
lista
Out[97]:
GENERAR LISTAS
Python 2.7 proporciona la función predefinida
range(inicio, fin, paso)
para generar listas automáticamente. En Python 3.5 no se genera una lista; se genera un objeto iterable.
In [99]:
# Se define la variable 'l' como un rango que empieza en 0, termina en 11 y va en saltos de 2
l = range(0,11,2)
# Después mediante la función list() creamos una lista de 'l'
list(l)
Out[99]:
In [100]:
# Ejemplo desglosado, en este caso si no se especifica un paso, lo realiza de 1 en 1
# Variable y muestra del valor de dicha variable
l = range(-5, 5)
l
Out[100]:
In [105]:
# Uso de list() para crear la lista de la variable 'l'
list(l)
Out[105]:
SECUENCIAS DE CARACTERES STR
Las cadenas son consideradas como una secuencia de caracteres y por tanto pueden ser tratadas como otras secuencias (tuplas o listas). Podemos acceder a cada uno de los caracteres de una cadena:
In [110]:
# Definimos una variable con un valor string
a = "Ana"
# Se considera que la cadena o string "Ana" es una secuencia de 3 posiciones, siendo:
# A --> posición 0
# n --> posición 1
# a --> posición 2
# Por tanto se puede acceder a cada uno de los caracteres que componen un string como si fueran elementos de una lista o tupla
a, a[0], a[2]
Out[110]:
In [115]:
# Los espacios no se tienen en cuenta
mensaje = "Vaya calor que hace"
mensaje[0], mensaje[12]
Out[115]:
In [116]:
# Las cadenas en Python son inmutables. Eso quiere decir que no es posible modificar una cadena sin crear otra nueva.
b = mensaje.replace('V', 'v')
b, mensaje
Out[116]:
In [114]:
# Uso de len() para saber la longitud de la string como si fuera una lista o tupla
len(mensaje)
Out[114]:
In [ ]: