11 Colecciones
Dentro de los lenguajes de programación hay tipos datos que son estructuras que pueden contener más de un dato, a comparación de los tipos de datos básicos, estas estructuras pueden contener muchos de esos datos básicos en su interior. Podrías decir que es una base de datos, pero esta solo existe mientras está la aplicación en ejecución, los datos son temporales. Las colecciones pueden contener cualquier tipo de dato, incluso mas colecciones.
En python son los siguientes:
Tuplas
Tipo de dato InmutableListas (arrays)
Tipo de MutableDiccionarios
Sets
Nota: En este curso solo se cubriran las tuplas y las listas.
10.1 Tuplas
Es una estructura de datos inmutables, una vez declarada no puede cambiar su contenido, ni agregar, ni eliminar, no modificar.
Cada posicion de los datos tiene un indice (index), el cual me ayuda a acceder a el. La primera posicion siempre es 0.
La convencion de como declarar o nombrar a una lista o tupla es en plural
parámetros a destacar:
- index: Indice
- len: Longitud
Sintaxis:
nombre_tupla = (dato1, dato2, ..., datoN)
# Declaracion de una tupla
# Tiene 3 posiciones, comenzado en el 0. Largo de 3
calificaciones = (8,7,9)
print(calificaciones)
type(calificaciones)
(8, 7, 9)
tuple
# vamos a acceder a cada dato
calificacion1 = calificaciones[0]
calificacion2 = calificaciones[1]
calificacion3 = calificaciones[2]
print(calificacion1)
print(calificacion2)
print(calificacion3)
8
7
9
# intentando modificar una tupla
calificaciones[0] = 10
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/tmp/ipykernel_890/2729348892.py in <module>
1 # intentando modificar una tupla
2
----> 3 calificaciones[0] = 10
TypeError: 'tuple' object does not support item assignment
# intentando borrar un elemento de la tupla
del calificaciones[1]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/tmp/ipykernel_890/1285800133.py in <module>
1 # intentando borrar un elemento de la tupla
2
----> 3 del calificaciones[1]
TypeError: 'tuple' object doesn't support item deletion
# Recorriendo tuplas con for y while
for calificacion in calificaciones:
print(calificacion)
print('-------------------------')
contador = 0
while contador < len(calificaciones):
calificacion = calificaciones[contador]
print(calificacion)
contador += 1
8
7
9
-------------------------
8
7
9
10.2 Listas
Es una coleccion de elementos ordenados. En otro lenguajes es conocido como un array
. A este tipo de coleccion es Mutable, es decir, se le pueden agregar, eliminar, quitar, elementos. Podemos hacer diversas operaciones con ellos.
Elementos que debemos tener en cuenta son:
index
: El indice o posicion de cada elemento en la lista, recordar que todas comienzan en la posicion 0.length
: La longitud o cantidad de elementos que contiene la lista
Sintaxis
nombre_lista = [elemento1, elemento2, elemento3,.. , elementoN]
Como se deben nombrar las listas (buena practica o convension)
- El nombre de la varable que contanga una lista, debe ser en plural
- Puede contener la palabra **list_** o **_list**
2.10.2.1 Funciones de las listas
Las lista son un objeto, por lo tanto cuenta con diversos metodos los cuales nos ayudan a interactuar con ellos:
append(element)
: Adds an element at the end of the listclear()
: Removes all the elements from the listcopy()
: Returns a copy of the listcount(element)
: Returns the number of elements with the specified valueextend(list)
: Add the elements of a list (or any iterable), to the end of the current listindex(element[,start[,end]])
: Returns the index of the first element with the specified valueinsert(position, element)
: Adds an element at the specified positionpop([index])
: Removes the element at the specified positionremove(element)
: Removes the first item with the specified valuereverse()
: Reverses the order of the listsort()
: Sorts the list
# Declaro una lista con unas materias
materias = ['analogicas', 'digitales', 'mediciones'] # lista de str
print(materias)
#agregamos una materia mas a la lista
materias.append('dibujo 3D')
#imprimo la lista
print(materias)
#creo otra lista
materias2 = ['neumatica', 'mecanismos']
# Extendemos la primer lista con la segunda
materias.extend(materias2)
#imprimo la lista
print(materias)
#inserto una materia en la posicion 2
materias.insert(2,'Matematicas')
#imprimo la lista
print(materias)
#removemos el elemento 'Matematicas'
materias.remove("Matematicas")
#imprimo la lista
print(materias)
# Ordenamos las lista
materias.sort()
#imprimo la lista
print(materias)
# sacamos un elemento de la lista, si no se especifica saca al ultimo
ultima_materia = materias.pop()
#imprimo la lista
print(materias)
print('ultima materia:', ultima_materia)
# Invierto el orden de la lista
materias.reverse()
#imprimo la lista
print(materias)
['analogicas', 'digitales', 'mediciones']
['analogicas', 'digitales', 'mediciones', 'dibujo 3D']
['analogicas', 'digitales', 'mediciones', 'dibujo 3D', 'neumatica', 'mecanismos']
['analogicas', 'digitales', 'Matematicas', 'mediciones', 'dibujo 3D', 'neumatica', 'mecanismos']
['analogicas', 'digitales', 'mediciones', 'dibujo 3D', 'neumatica', 'mecanismos']
['analogicas', 'dibujo 3D', 'digitales', 'mecanismos', 'mediciones', 'neumatica']
['analogicas', 'dibujo 3D', 'digitales', 'mecanismos', 'mediciones']
ultima materia: neumatica
['mediciones', 'mecanismos', 'digitales', 'dibujo 3D', 'analogicas']
Obteniendo los datos de una lista
Sintaxis
variable = nombre_lista [ posicion ]
#Acceso a los datos de la lista
materia1 = materias[0]
materia2 = materias[1]
materia3 = materias[2]
materia4 = materias[3]
print(materia1)
print(materia2)
print(materia3)
print(materia4)
mediciones
mecanismos
digitales
dibujo 3D
# Recorriendo una lista con FOR
for materia in materias:
print('La materia es: ', materia)
print('*********************')
# Recorriendo una lista con WHILE
count = 0
while count < len(materias):
materia = materias[count]
print('La materia es: ',materia)
count +=1
La materia es: mediciones
La materia es: mecanismos
La materia es: digitales
La materia es: dibujo 3D
La materia es: analogicas
*********************
La materia es: mediciones
La materia es: mecanismos
La materia es: digitales
La materia es: dibujo 3D
La materia es: analogicas
# Cosas adicionales que se pueden realizar con listas
# obtener la suma de los valores contenidos en la lista
valores = [1,5,3,9,6,3,5,8,7,2,6,7,2,5,2,3,5,4,5]
suma = sum(valores)
maximo = max(valores)
minimo = min(valores)
print("La suma:", suma)
print("El valor maximo:", maximo)
print("El valor minimo:", minimo)
La suma: 88
El valor maximo: 9
El valor minimo: 1
Ejercicios
-
Crear una lista de frutas: manzana, platano y melon. Posteriormete agregar sandia. Despues agregarle una lista mas que contenga papaya, kiwi y durazno. He imprimir la lista completa. Despues remover la sandia e imprimir el resultado. Recorrer la lista de frutas imprimiendo cada una (usando un ciclo, de preferencia usar for).
-
Crear una lista con sus calificaciones de Neumatica, y obtener el promedio. Se debe utilizar la función
sum
para el procedimiento. Imprimir cual es la calificacion maxima y minima, usando las funcionesmax()
ymin()
Eliminando elementos de la lista del
Cuando queremos eliminar algún elemento de una coleccion se usa la palabra reservada del
junto a la posicion del elemento a eliminar.
Sintaxis
del coleccion[posicion|key]
# Eliminar elementos de una coleccion
materias = ['analogica', 'digitales', 'mediciones' ]
print(materias)
del materias[1] # Elimino el elemento que esta en la posicion 1 de la coleccion
print(materias)
alumnos = { 'carlos':[8,8,9] , 'angel':[8,8,8] }
print(alumnos)
del alumnos['carlos']
print(alumnos)
Función len
Los iteradores por default no te dicen cual es su largo, en muchas ocasiones necesitamos saber el largo para realizar ciertas tareas, para eso Python trae una función que nos ayuda.
Sintaxis
len(iterator)
: Devuelve el numero de los elementos de una coleccion
# Ejemplos de aplicacion de la función len()
string = 'hola'
str_len = len(string)
tupla = (5,9,3,6,'mensaje')
tupla_len = len(tupla)
lista = [1,2,3,6,'hola']
lista_len = len(lista)
diccionario = {'key1': 'valor1', 'key2': 'valor2', 'key3': 'valor3' }
dic_len = len(diccionario)
print('largo de str',str_len)
print('largo de tupla',tupla_len)
print('largo de lista',lista_len)
print('largo de diccionario',dic_len)
largo de str 4
largo de tupla 5
largo de lista 5
largo de diccionario 3
especialidades = [
'mecatronica',
'laboratorio',
'contanbilidad',
'mecanica',
'electricidad'
]
count = 0
while count < len(especialidades):
especialidad = especialidades[count]
print(f'Una de las especialidades es: {especialidad}')
count+=1
Una de las especialidades es: mecatronica
Una de las especialidades es: laboratorio
Una de las especialidades es: contanbilidad
Una de las especialidades es: mecanica
Una de las especialidades es: electricidad
import random
#Creando un pesudobot
#declaramos una lista con las frases que queremos decir con nuestro bot
hobbies = ['leer', 'correr', 'nadar']
print('Hola, me llamo BotPy')
print('Cual es tu nombre')
name = input()
print(f'Es un gusto concerte {name}')
print('Que lindo nombre tienes ;)')
print('Cual es tu hobby?')
hobby = input()
print(f'Wow!!!! que conincidencia, a mi también me encanta {hobby}')
print(f'Te cuento que también me gusta mucho {random.choice(hobbies)}')
Hola, me llamo BotPy
Cual es tu nombre
---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
/tmp/ipykernel_30200/981218890.py in <module>
8 print('Hola, me llamo BotPy')
9 print('Cual es tu nombre')
---> 10 name = input()
11
12 print(f'Es un gusto concerte {name}')
~/Downloads/Cursos/Python/lib/python3.7/site-packages/ipykernel/kernelbase.py in raw_input(self, prompt)
983 self._parent_ident["shell"],
984 self.get_parent("shell"),
--> 985 password=False,
986 )
987
~/Downloads/Cursos/Python/lib/python3.7/site-packages/ipykernel/kernelbase.py in _input_request(self, prompt, ident, parent, password)
1024 except KeyboardInterrupt:
1025 # re-raise KeyboardInterrupt, to truncate traceback
-> 1026 raise KeyboardInterrupt("Interrupted by user") from None
1027 except Exception as e:
1028 self.log.warning("Invalid Message:", exc_info=True)
KeyboardInterrupt: Interrupted by user
10.3 Diccionarios
Son un tipo de coleccion que su estructura es Llave - Valor
. Para obtener el acceso al valor se hace a traves de la llave. La llave es unica y por lo tanto no se puede repetir.
Sintaxis
# Creacion de un diccionario
diccionario = {
'llave1': 'str',
'llave2' : 5
'llave3' : True,
'llave4' : [1,2,6,'a']
......
}
# Leyendo datos del diccionario
variable1 = diccionario['llave3'] # True
variable1 = diccionario.get('llave3') # True, en caso que no exista devuelve None
# Modificando valores existentes en el diccionario
diccionario['llave4'] = [1,2,6,8,5,6]
# Agregando valores nuevos al diccionario
diccionario['llave5'] = 'un valor'
calificaciones_neumatica = {
'gamas': 9,
'angelo': 8,
'dania' : 10
}
print(calificaciones_neumatica['gamas'] )
print(calificaciones_neumatica['angelo'] )
print(calificaciones_neumatica['dania'] )
calificaciones_neumatica['leon'] = 10 # agregando un valor al diccionario
print(calificaciones_neumatica['leon'])
calificaciones_neumatica['angelo'] = 7 # actualizo el valor de esa llave
print(calificaciones_neumatica['angelo'])
9
8
10
10
7
for key in calificaciones_neumatica:
print(f'con la llave: {key}, el valor es: {calificaciones_neumatica[key]}')
print('=======================')
# Extraigo todas las llaves
for key in calificaciones_neumatica.keys():
print(key)
print('=======================')
# Extraigo los valores
for values in calificaciones_neumatica.values():
print(values)
con la llave: gamas, el valor es: 9
con la llave: angelo, el valor es: 7
con la llave: dania, el valor es: 10
con la llave: leon, el valor es: 10
=======================
gamas
angelo
dania
leon
=======================
9
7
10
10
Función tuple()
La función tuple crea una instancia de una tupla vacia si no le pasamos ningun argumento. El argumento que puede recibir una coleccion.
mi_tupla = tuple() # crea una tupla vacia
calificaciones = [8,6,9,6,8]
tupla_calificaciones = tuple(calificaciones)
type(mi_tupla)
print(calificaciones)
print(tupla_calificaciones)
[8, 6, 9, 6, 8]
(8, 6, 9, 6, 8)
Función list()
La función list crea una instancia de una lista vacia si no le pasamos ningun argumento. El argumento que puede recibir una coleccion.
lista_vacia = list()
print(lista_vacia)
tupla_calificaciones = (8, 6, 9, 6, 8)
lista_calificaciones = list(tupla_calificaciones)
print(tupla_calificaciones)
print(lista_calificaciones)
[]
(8, 6, 9, 6, 8)
[8, 6, 9, 6, 8]
Función dict()
La función dict crea una instancia de un diccionario vacio si no le pasamos ningun argumento. El argumento que puede recibir una coleccion.
mi_diccionario = dict()
print(mi_diccionario)
mi_diccionario['hola'] = 4
print(mi_diccionario)
{}
{'hola': 4}
Función enumerate()
A esta función se le pasa un iterable y me devuelve 2 valores, en la primera posicion me pasa el indice y en la segunda posicion me pasa el valor que tiene en ese momento el iterador.
Sintaxis:
index, value = enumerate(iterador)
pokemons = ['pikachu', 'bolbasor', 'charizard' ]
# Forma fea y horrible
count = 0
for pokemon in pokemons:
print(f'La posicion de {pokemon} es {count}')
count +=1
print('===================================')
# La forma chida
for index, value in enumerate(pokemons):
print(f'La posicion de {value} es {index}')
La posicion de pikachu es 0
La posicion de bolbasor es 1
La posicion de charizard es 2
===================================
La posicion de pikachu es 0
La posicion de bolbasor es 1
La posicion de charizard es 2
Realizado por el Instructor: Alejandro Leyva