Saltar a contenido

banner

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 Inmutable
  • Listas (arrays) Tipo de Mutable
  • Diccionarios
  • Sets

10.1 Tuplas

Es una estructura de datos inmutables, una vez declarada no puede cambiar su contenido, ni agregar, ni eliminar, no modificar.

Cada posición de los datos tiene un indice (index), el cual me ayuda a acceder a el. La primera posición siempre es 0.

La convención 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)
# Declaración 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 colección de elementos ordenados. En otro lenguajes es conocido como un array. A este tipo de colección 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 posición de cada elemento en la lista, recordar que todas comienzan en la posición 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 variable que contenga una lista, debe ser en plural
  • Puede contener la palabra **list_** o **_list**

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 list
  • clear(): Removes all the elements from the list
  • copy(): Returns a copy of the list
  • count(element): Returns the number of elements with the specified value
  • extend(list): Add the elements of a list (or any iterable), to the end of the current list
  • index(element[,start[,end]]): Returns the index of the first element with the specified value
  • insert(position, element): Adds an element at the specified position
  • pop([index]): Removes the element at the specified position
  • remove(element): Removes the first item with the specified value
  • reverse(): Reverses the order of the list
  • sort(): 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 posición 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

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 colección
# Ejemplos de aplicación 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',
    'contabilidad',
    '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: contabilidad
    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 conocerte {name}')
print('Que lindo nombre tienes ;)')

print('Cual es tu hobby?')
hobby = input()

print(f'Wow!!!! que coincidencia, 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

Eliminando elementos de la lista del

Cuando queremos eliminar algún elemento de una colección se usa la palabra reservada del junto a la posición del elemento a eliminar.

Sintaxis

del coleccion[posicion|key]
# Eliminar elementos de una colección

materias = ['analogica', 'digitales', 'mediciones' ]

print(materias)

del materias[1] # Elimino el elemento que esta en la posición 1 de la colección

print(materias)


alumnos = { 'carlos':[8,8,9] , 'angel':[8,8,8] }

print(alumnos)

del alumnos['carlos']

print(alumnos)

Ejercicios

  1. Crear una lista de frutas: manzana, platano y melon. Posteriormente agregar sandia. Después, 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).
  2. Crear una lista con sus calificaciones de Matemáticas, y obtener el promedio. Se debe utilizar la función sum para el procedimiento. Imprimir cual es la calificación maxima y minima, usando las funciones max() y min()
  3. Generador de contraseñas, de 8 dígitos que contengan de todos los símbolos.

10.3 Diccionarios

Son un tipo de colección que su estructura es Llave - Valor. Para obtener el acceso al valor se hace a traves de la llave. La llave es única y por lo tanto no se puede repetir.

Sintaxis

# Creación de un diccionario
    diccionario = {
        'llave1' : valor,
        'llave2' : valor,
        'llave3' : valor,
        'llave4' : valor,
        ......
    }

10.3.1 Funciones de diccionarios

El diccionario es un objeto, por lo tanto cuenta con diversos métodos los cuales nos ayudan a interactuar con ellos:

  • keys(): Devuelve una lista de todas las claves (keys) del diccionario. {'a': 1, 'b': 2}.keys() → dict_keys(['a', 'b'])
  • values(): Devuelve una lista de todos los valores del diccionario. {'a': 1, 'b': 2}.values() → dict_values([1, 2])
  • items(): Devuelve una lista de los pares (clave, valor) como tuples. {'a': 1, 'b': 2}.items() → dict_items([('a', 1), ('b', 2)])
  • get(key, default): Devuelve el valor asociado a la key. Si la clave no existe, devuelve un valor opcional default (por defecto es None), en lugar de lanzar un error (KeyError). d.get('c', 0)
  • pop(key, default): Elimina la clave y su valor asociado del diccionario y devuelve el valor. Si la clave no existe, puede devolver el default o lanzar un KeyError si no se proporciona default. d.pop('a')
  • update(other_dict): Fusiona el diccionario actual con otro (other_dict). Si una clave existe en ambos, el valor del other_dict la sobrescribe. Útil para añadir. d.update({'b': 3, 'c': 4})
  • clear(): Elimina todos los pares (clave: valor) del diccionario, dejándolo vacío. d.clear()
  • copy(): Devuelve una copia superficial del diccionario. Importante para evitar modificar el diccionario original accidentalmente. d_copia = d.copy()
# Creación 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 vacía si no le pasamos ningún argumento. El argumento que puede recibir una colección.

mi_tupla = tuple() # crea una tupla vacía

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 vacía si no le pasamos ningún argumento. El argumento que puede recibir una colección.

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 vacía si no le pasamos ningún argumento. El argumento que puede recibir una colección.

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 posición me pasa el indice y en la segunda posición 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 posición de {pokemon} es {count}')
    count +=1

print('===================================')

# La forma chida
for index, value in enumerate(pokemons):
    print(f'La posición de {value} es {index}')
    La posición de pikachu es 0
    La posición de bolbasor es 1
    La posición de charizard es 2
    ===================================
    La posición de pikachu es 0
    La posición de bolbasor es 1
    La posición de charizard es 2

Realizado por el Instructor: Alejandro Leyva