Está en la página 1de 74

CCPG1001

Fundamentos de
Programación

Unidad 7 – Colecciones
Agenda
7.1 Tipos de colecciones y sus características.
7.3 Operaciones con colecciones.
Objetivos
• Identificar los diferentes tipos de colecciones para representar datos
relacionados.
• Usar un tipo de colección para resolver un problema que involucre
manejo de datos.
• Utilizar colecciones anidadas para resolver problemas complejos.
• Aplicar algoritmos receta para resolver problemas que utilicen
colecciones dentro de un programa.
7.1 – Tipos de colecciones y sus
Características
Colecciones

Las colecciones permiten agrupar datos, los cuales


pueden ser de tipos diferentes.

Python soporta distintos tipos de colecciones, que a su


vez pueden combinarse y formar tipos de datos
compuestos
Tipos de colecciones

Listas

Tuplas

Conjuntos (Sets)

Diccionarios
Tuplas
Tuplas

• A diferencia de las listas [ ], las tuplas se inicializan con ( ).

• Son inmutables, es decir, su contenido no puede ser modificado.


• No tienen función append

• El slicing funciona como en las listas.


• Recuerda que al extraer una porción de una lista, se obtiene una lista
nueva; al extraerla de una tupla, se obtiene una tupla nueva.
Tuplas
Definición:
>>> tupla = ("a", "b", "c", "z", 11)

Acceso a elementos:
>>> tupla[0]
Índice
Devuelve: 'a'
>>> tupla[−1]
Devuelve: 11
>>> tupla[1:3]
Slicing
Devuelve: ('b', 'c')
Tuplas
• No pueden eliminarse elementos de una tupla.
• Las tuplas son inmutables.
• Las tuplas no tienen los métodos remove ni pop.

• Las tuplas pueden convertirse en listas, y viceversa. La función incorporada


tuple(…) toma una lista y devuelve una tupla con los mismos
elementos, y la función list(…) toma una tupla y devuelve una lista.
• En la práctica, tuple congela una lista, y list descongela una tupla.
Tuplas
Convertir una lista en una tupla:

>>> lista = ["a", "b", "c", "z", 11]


>>> tupla = tuple(lista)

Convertir una tupla en una lista:

>>> list(tupla)
Tuplas

• Una propiedad útil de las tuplas es que permite la


heterogeneidad de los datos.
• Una tupla puede contener más de un tipo de dato nativo.
• ¡Una tupla puede contener otras colecciones!

TIP:
Pensemos en las tuplas como una lista constante.
Tuplas
Empaquetando y desempaquetando datos

# empaquetado de datos, declaración


>>> t = (12345, 54321, "hola")

#desempaquetado
>>> x, y, z = t

¿Cuáles son los valores delas variables x, y, z?


Tuplas
Las tuplas pueden servir para empaquetar datos de retorno dentro de una
función. Cuando la función sea llamada, se deben de declarar el mismo
número de variables para poder desempaquetar todos sus valores.

def f(r):
""" Return (circumference, area) of a circle of radius r
""“

c=2*math.pi*r
a=math.pi*r*r
return (c, a)

¿Cómo invocaríamos a la función f?


Tuplas: ¿Y si queremos
modificar los valores?
Supongamos que tenemos la siguiente información:

>>> julia = ("Julia", "Roberts", 1967, "Duplicity", 2009, "Actress" )

Si Julia tiene un filme reciente, podemos cambiar el valor de la


variable que hace referencia a la tupla original para que referencie a
una nueva tupla que a su vez usa información de la tupla original:

>>> julia = julia[:3] + ("Eat Pray Love", 2010) + julia[5:]


Tuplas: Operadores

Operador Descripción Ejemplo de uso


+ Concatena dos tuplas t3 = t1 + t2
* Concatena una tupla n veces t2 = t1 * 4

in Retorna True si un valor se encuentra valor in t1


en la tupla
Tuplas: Funciones
Operador Descripción Ejemplo de uso
len ( ) Retorna el número de elementos en una tupla len (t)
len(t[i:j])
max ( ) Retorna el valor máximo en una tupla max(t)
max(t[i:j])
min ( ) Retorna el valor mínimo en una tpla min(t)
min(t[i:j])
Convierte una secuencia o colección de valores
tuple ( ) tuple(seq)
a una tupla
del ( ) Elimina una tupla completamente del(t)
sum ( ) Retorma la suma de todos los valores de una suma=sum(t)
tupla
• Crear una función que reciba dos valores enteros a y b y que devuelva
una tupla de todos los número primos que se encuentren entre a y b.

• En el programa principal pedir al usuario los valores de a y b e invocar


a la función.
• Dada una lista de números que puede contener números repetidos,
escriba un programa para producir una lista de tuplas de dos
componentes. El primer componente de la tupla es cada número
diferente y el segundo elemento es la cantidad de veces que el
número aparece en la lista.
Conjuntos (Sets)
Conjuntos (Sets)

• Un conjunto (set) contiene una colección de objetos


únicos no ordenados inmutables.

• De manera similar que los conjuntos matemáticos, los


conjuntos en Python no pueden contener ocurrencias del
mismo elemento.
Conjuntos
Definición:

#Definición directa
>>> u= {4,6,1,3,8,6}

>>> set1 = set() # Un nuevo set vacío

>>> set1.add("cat") # Añadir un elemento

>>> u={ } ¡No crea un Set vacío!


Conjuntos

• Los conjuntos no soportan indexamiento ni slicing.


• No es correcto utilizar s[0] pues retornará un error.

• No se les puede asignar valores directamente.


• s[0]=10 Retornárá error.
Conjuntos

• Una lista se puede convertir a un set con la función


set(), eliminando aquellos elementos que se repiten.

• De la misma forma un set se puede convertir a una lista


con la función list(…).
Conjuntos
Se puede crear un conjunto de datos a partir de una lista
utilizando la función set:

>>> set([0, 1, 2, 3])


set([0, 1, 2, 3])

>>> set("obtuse")
set(['b', 'e', 'o', 's', 'u', 't'])
Conjuntos

• Para saber el número de elementos se utiliza len(s), al igual


que las listas.

• Se puede obtener el elemento máximo y mínimo y la suma de


todos sus elementos con las funciones max(s), min(s) y
sum(s) respectivamente (siempre que sus elementos sean
enteros o reales).
Conjuntos: Pertenencia
Se puede verificar si un elemento existe en el set mediante el operador in. De
la misma forma se puede verificar si no existe mediante el operador not in:

>>> s = set([32, 9, 12, 14, 54, 26])


>>> 32 in s
True

>>> 6 in s
False

>>> 6 not in s
True
Conjuntos: Pertenencia
También se puede verificar la pertenencia de conjuntos enteros.
Si nos dan dos subconjuntos, podemos verificar si el primero es un
subconjunto del segundo o superconjunto.

>>> s.issubset(set([32, 8, 9, 12, 14, -4, 54, 26, 19]))


True

>>> s.issuperset(set([9, 12]))


True
Modificando Conjuntos
Se pueden agregar elementos a un set con la función add :

>>> s = set([12, 26, 54])


>>> s.add(32)
>>> s
set([32, 26, 12, 54])

Hay que tener en cuenta que si se agrega un elemento que ya existe en


el set, el resultado será el mismo.
Modificando Conjuntos: Agregar
Elementos
Otra forma de agregar un grupo de elementos al set es utilizando la
función update. Al set anterior, trataremos de agregar un grupo de
elementos:

>>> s.update([26, 12, 9, 14])

>>> s
set([32, 9, 12, 14, 54, 26])
Modificando Conjuntos: Eliminar
Elementos
Las siguientes funciones se pueden utilizar para eliminar elementos de un
set:

• pop
• remove
• discard
• clear
Modificando Conjuntos: Eliminar
Elementos
La función pop, elimina un elemento aleatorio del set.

>>> s = set([1,2,3,4,5,6])
>>> s.pop()
1

>>> s
set([2,3,4,5,6])
Modificando Conjuntos: Eliminar
Elementos
Tenemos también la función remove para eliminar un elemento
específico:

>>> s.remove(3)

>>> s
set([2,4,5,6])

Hay que tener cuidado al eliminar un elemento que no se encuentra en el


set, esto causaría un error.

La función discard tiene la misma funcionalidad que remove, pero si el


elemento a remover no se encuentra en el set no hace nada.
Modificando Conjuntos: Eliminar
Elementos
La función clear nos permite eliminar todos los elementos de un set.

>>> s.clear()

>>> s
set([])
Conjuntos : Operaciones

Dada la naturaleza de este tipo de colección se pueden


realizar las mismas operaciones que se realizan en los
conjuntos, tal como unión, intersección, diferencia,
diferencia simétrica, entre otras.
Conjuntos : Operaciones
Sean a, b dos conjuntos:

Operación Descripción Funciones Equivalentes


a|b Unión de conjuntos a.union(b)
a&b Intersección de conjuntos a.intersection(b)
a-b Diferencia de conjuntos a.difference(b)
a.symmetric_difference(b
a^b Diferencia simétrica de conjuntos )
Conjuntos: Operaciones

>>> A = set([1, 2, 3, 4, 5])


>>> B = set([4, 5, 6, 7, 8])

#INTERSECCION
>>> A & B
{4, 5}

>>> A.intersection(B)
{4, 5}

>>> B.intersection(A)
{4, 5}
Conjuntos: Operaciones
>>> A = set([1, 2, 3, 4, 5])
>>> B = set([4, 5, 6, 7, 8])

# UNION

>>> A | B
{1, 2, 3, 4, 5, 6, 7, 8}

>>> A.union(B)

{1, 2, 3, 4, 5, 6, 7, 8}
>>> B.union(A)
{1, 2, 3, 4, 5, 6, 7, 8}
Conjuntos: Operaciones
>>> A = set([1, 2, 3, 4, 5])
>>> B = set([4, 5, 6, 7, 8])

#DIFERENCIA
>>> A - B
{1, 2, 3}

>>> A.difference(B)
{1, 2, 3}

>>> B - A
{8, 6, 7}
Conjuntos: Operaciones

>>> A = set([1, 2, 3, 4, 5])


>>> B = set([4, 5, 6, 7, 8])

#DIFERENCIA SIMETRICA
>>> A ^ B
{1, 2, 3, 6, 7, 8}

>>> A.symmetric_difference(B)
{1, 2, 3, 6, 7, 8}

>>> B.symmetric_difference(A)
{1, 2, 3, 6, 7, 8}
Ejercicios
• Crear un programa que muestre por pantalla una lista sin palabras repetidas de una frase
ingresada por el usuario.

• Una empresa de marketing desea saber que productos en común compran tres usuarios en
un supermercado. Para esto, la empresa tiene una lista de los productos comprados para
cada usuario. Mostrar por pantalla cuáles productos compran en común los tres usuarios.

• Una empresa guarda la lista de correo de sus empleados en dos archivos diferentes. Puede
darse el caso de que en ambos archivos exista el correo del mismo empleado. Se desea
enviar un correo masivo a todos los empleados de la empresa, de manera que los correos
no se repitan en el destinatario. Escriba un programa que dada dos listas de correos de
empleados lista_A y lista_B, muestre una lista con los correos de todos los empleados de la
empresa (sin repetir).
• Dada una cadena de caracteres: escriba un programa para determinar
cuantos caracteres repetidos tiene. Use conjuntos:
Diccionarios
Diccionarios

• Un diccionario es un conjunto no ordenado de pares clave:valor


• Las claven son únicas.

• En un diccionario, si lo pensamos como un conjunto de elementos,


cada elemento tiene dos partes, una es la llamada clave (key), y la
otra es la llamada valor (value).
Diccionarios

Tanto la clave como el valor puede ser casi cualquier cosa (cualquier
tipo de dato), pero la lógica del diccionario es que llamando a la clave
se obtenga su valor.
Diccionarios

• Los componentes de un diccionario no están en un orden


específico.

• Se pueden obtener los valores por su clave, pero no se


pueden obtener las claves por el valor.
Diccionarios
• No puede haber claves duplicadas en un diccionario. La asignación
de un valor a una clave existente borrará el valor anterior.

• Su representación conceptual en la memoria son celdas identificadas


con la clave.
Claves
x={123: ‘Algebra’, 325: ‘Fisica’, 215: ‘Química’}
Valores
Diccionarios
• Los valores de un diccionario pueden ser de cualquier tipo, incluidas
cadenas, enteros, objetos o incluso otros diccionarios. Y en un mismo
diccionario, los valores no tienen que ser todos del mismo tipo: se
pueden mezclar y emparejar como sea necesario.

• Las claves de un diccionario están más restringidas, pero pueden ser


cadenas, enteros, y algunos tipos más. También se pueden mezclar y
emparejar distintos tipos de claves en un diccionario.
Diccionarios
Definición de un diccionario
# Diccionario vacío
dic = {}

#Diccionario con valores


dic= {“200705080”: ‘Jhonny Pincay’, “201525896”: ‘Martha Perez’}
Diccionarios
Agregando elementos
dic[“201685296”] = “Juan Castro”

dic[“200978945”] = “Juana Rendon”

Modificar un elemento
#Diccionario Original
dic= {“200705080”: ‘Jhonny Pincay’, “201525896”: ‘Martha Perez’}

#Modificando Elemento
dic[“200705080”] = “Vladimir Pincay”

#Diccionario Resultante
dic= {“200705080”: ‘Vladimir Pincay’, “201525896”: ‘Martha Perez’}
Diccionarios
Eliminar un elemento

del dic[“201685296”]

del dic[“200978945”]

Eliminar todos los elementos

dic.clear()
Diccionarios: Función keys()
La función keys() de un diccionario devuelve una colección con todas las claves.
Las claves no necesariamente estarán en el orden en que se definió el diccionario.

midiccionario = {'Ciudad': 'Guayaquil', 'Nombre': 'Flavio',


'Apellido': 'Danesse', 'Edad': 30, 'FechaNac': '21/10/1986'}

>>> midiccionario.keys()

dict_keys(['Ciudad', 'Nombre', 'Apellido', 'Edad', 'FechaNac'])

Usar método list( ), si deseas transformar la colección con


las claves a un dato tipo lista.
Diccionarios: Función values()
La función values() devuelve una lista con todos los valores.
La lista está en el mismo orden que la devuelta por keys().

>>> midiccionario.values()

dict_values(['Guayaquil', 'Flavio', 'Danesse', 30, '21/10/1986'])


Diccionarios: Función items()

La función items() devuelve una lista de tuplas de la forma (key, valor).


Esta lista contiene todos los datos del diccionario.

>>> midiccionario.items()

dict_items([('Ciudad', 'Guayaquil'), ('Nombre', 'Flavio'),


('Apellido', 'Danesse'), ('Edad', 30), ('FechaNac', '21/10/1986')])
Diccionarios: Función get()

La función get() devuelve el valor asociado con la clave en el


diccionario o un valor por defecto -None- si la clave no existe:

>>> midiccionario.get('FechaNac')
'21/10/1986'
Ejemplo: Diccionario con valores
tipo lista
• Definir un diccionario con clave numérica y valor asociado
que contiene una lista de dos elementos: nombre y edad

>> dic = {123: [‘Anita’, 25], 234: [‘Elena’, 34], 456:[‘Carmen’, 45]}
Ejemplo: Diccionario con valores
tipo lista
• Para acceder al contenido de la lista asociada a la clave,
debemos hacerlo a través de la clave en el diccionario y
luego a través del índice del elemento de la lista.
>> dic = {123: [‘Anita’, 25], 234: [‘Elena’, 34], 456:[‘Carmen’, 45]}

>> dic[123][0]
‘Anita’

>> dic[123][1]
25
Funciones comunes aplicables a
Diccionarios
>> dic = {123: [‘Anita’, 25], 234: [‘Elena’, 34], 456:[‘Carmen’, 45]}

# Cantidad de elementos
>> len(dic)
3

# El mayor valor de clave


>> max(dic)
456

#El menor valor de clave


>>min (dic)
123

#Eliminar el diccionario de memoria


>> del dic
Funciones comunes aplicables a
Diccionarios
>> dic = {123: [‘Anita’, 25], 234: [‘Elena’, 34], 456:[‘Carmen’, 45]}

# Verificar si una clave se encuentra en el Diccionario


>> 123 in dic
True

>> 123 not in dic


False

>> 789 in dic


False

# Obtener una lista de las claves ordenadas


>> sorted(dic)
[123, 234, 456]
Convertir Lista a Diccionario
• La lista debe tener una estructura compatible con el
diccionario que se desea obtener
#Lista de Tuplas
Lista de
>>> a=[(10,”Marcos”), (20,”Martha”)]
tuplas
>>> d= dict(a)
>>> d

{10: “Marcos”, 20: “Martha”}

¿Qué elementos se convirtieron en las claves y cuáles en


valores del diccionario?
Crear una lista con las claves de
un Diccionario: keys()

>> dic={10: “Marcos”, 20: “Martha”}


>> c= dic.keys()
>> list(c)
[10, 20]

#También se obtiene la lista de claves


#tomándolas directamente con list
>> list(dic)
[10,20]
Crear una lista con los valores
de un Diccionario: values()

>> dic={10: “Marcos”, 20: “Martha”}


>> v= dic.values()
>> list(v)

[“Marcos”, “Martha”]
Crear una lista con los valores
de un diccionario: ítems()

• Los componentes de la lista resultante son tuplas


>> dic={10: “Marcos”, 20: “Martha”}
>> c = dic.items()
>> lista = list (c)

>> lista
[(10,”Marcos”), (20,“Martha”)]
7.1 – Operaciones con
colecciones
Operaciones con colecciones
Diccionario
Tuplas Sets
s
Unión, intersección,
Concatenación diferencia, diferencia Añadir, modificar y
simétrica. eliminar elementos.

Verificar pertenencia de
Indexamiento y slicing
conjuntos

Acceso a valores a
Verificar existencia de Añadir y eliminar través de las claves
elementos (in) elementos.
Iterando Colecciones
Tupla

>> a=(28,73,45,67,26,45)
>> for e in a:
print (e)

28
73
45
67
26
45
Conjunto

>> x = {7,3,8,6,9}
>> for e in x:
print (e)

8
9
3
6
7
Diccionarios
Por claves:

>> d={123: [‘libro’, 20], 234:[‘cuaderno’, 30]}

>> for c in d:
print(c,d[c])

¿A qué estamos accediendo?


Diccionarios
Por ítems:

>> d={123: [‘libro’, 20], 234:[‘cuaderno’, 30]}

>> for e in d.items():


print(e)

¡e es una tupla!
¿Cuál es su estructura?
Diccionarios
Por ítems separados en clave, valor:

>> d={123: [‘libro’, 20], 234:[‘cuaderno’, 30]}

>> for c,v in d.items():


print(c,v)

C tendrá el tipo de la clave


V tendrá el tipo de los valores
Diccionarios

Cuando iteramos un diccionario, sus elementos no


necesariamente estarán en el orden en que fueron
agregados.
Ejercicios
• A elección del profesor
Bibliografía
• Rodríguez, Luis. Python Programación Luis Rodríguez, Python
Programación.
• Downey, A., Elkner, J., & Meyers, C. (2012). How to think like a
computer scientist: learning with python. Green Tea Press, Wellesley,
Massachusetts.