Conjuntos y Tuplas
Antes de continuar con conjuntos y tuplas, es importante mencionar que no se tratarán los diccionarios aquí.
Conjunto
Un conjunto ofrece una complejidad temporal promedio O(1) para inserciones, eliminaciones y búsquedas, lo que significa que estas operaciones se realizan en tiempo constante, independientemente del tamaño del conjunto. Esto hace que los conjuntos sean mucho más rápidos que las listas para pruebas de pertenencia y operaciones como agregar o eliminar elementos, donde las listas requieren complejidad temporal O(n) (el tiempo crece linealmente con el tamaño de la lista) en el peor de los casos.
Cuándo utilizar:
- Se requieren elementos únicos, asegurando que no haya duplicados en la colección;
- Se necesita una prueba de pertenencia rápida, lo que hace que los conjuntos sean ideales para tareas como verificar la existencia de un elemento;
- Se realizan operaciones como uniones, intersecciones o diferencias de conjuntos, que los conjuntos soportan con métodos optimizados;
- El orden no importa, ya que los conjuntos son inherentemente desordenados y no es necesario mantener el orden de inserción.
1234567891011121314151617181920# Removing duplicates from a list using a set numbers = [1, 3, 2, 3, 5, 4, 5] unique_numbers = set(numbers) print(f'Unique Numbers: {unique_numbers}') # Fast membership testing names = {'Alice', 'Bob', 'Charlie'} print(f'Is Alice in the set? {"Alice" in names}') print(f'Is Eve in the set? {"Eve" in names}') # Set operations: union, intersection, and difference set_a = {1, 4, 3, 2} set_b = {3, 5, 4, 6} print(f'Union: {set_a.union(set_b)}') print(f'Intersection: {set_a.intersection(set_b)}') print(f'Difference: {set_a.difference(set_b)}') # Removing elements from a set safely with discard names.discard('Alice') # Safe removal, no error if the element doesn't exist print(f'Names after removal: {names}')
Ahora comparemos el rendimiento de un conjunto frente a una lista en la prueba de pertenencia:
12345678910111213141516171819import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Create a large list and set with the same elements large_list = list(range(10000000)) large_set = set(large_list) # Test membership for an element at the end element_to_find = 9999999 @timeit_decorator(number=50) def test_membership(element, collection): return element in collection print('List:') print(test_membership(element_to_find, large_list)) print('Set:') print(test_membership(element_to_find, large_set))
Tupla
Las tuplas se utilizan normalmente cuando es necesario garantizar que los datos no puedan ser modificados o como clave en un dict o elemento en un set (ya que las tuplas son hashables).
-
Preferibles a las listas: cuando se requiere datos inmutables, se desea utilizar la colección como clave de diccionario o elemento de conjunto, o cuando se necesita almacenamiento eficiente en memoria para una colección de tamaño fijo;
-
Preferibles a los arrays de NumPy: cuando los datos son no numéricos o cuando la inmutabilidad es fundamental. Aunque los arrays de NumPy están diseñados para cálculos numéricos y son mutables por defecto, las tuplas proporcionan seguridad para datos no numéricos o colecciones pequeñas y estructuradas que deben permanecer constantes.
12345678# Each tuple in the list represents an immutable student record students = [ (1834, 'James', 'Johnson'), (2749, 'Alice', 'Smith'), (4923, 'Bob', 'Brown') ] # Attempting to modify a tuple will raise a TypeError students[0][1] = 'Fred'
Dado que la lista students contiene registros de estudiantes (ID, nombre, apellido) que deben ser solo lectura, es preferible utilizar tuplas para cada registro en lugar de listas. Además, como se mencionó anteriormente, las tuplas son ligeramente más eficientes en memoria en comparación con las listas.
1. ¿Cuál de los siguientes escenarios es más adecuado para usar un conjunto en lugar de una lista?
2. Tienes un conjunto de datos con millones de registros y necesitas comprobar frecuentemente si existen valores específicos en él. ¿Qué estructura de datos es la más eficiente para este propósito?
3. Está creando un registro para cada estudiante que incluye un ID único, nombre y apellido. Los datos no deben modificarse una vez creados. ¿Qué estructura de datos sería la más adecuada?
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 7.69
Conjuntos y Tuplas
Desliza para mostrar el menú
Antes de continuar con conjuntos y tuplas, es importante mencionar que no se tratarán los diccionarios aquí.
Conjunto
Un conjunto ofrece una complejidad temporal promedio O(1) para inserciones, eliminaciones y búsquedas, lo que significa que estas operaciones se realizan en tiempo constante, independientemente del tamaño del conjunto. Esto hace que los conjuntos sean mucho más rápidos que las listas para pruebas de pertenencia y operaciones como agregar o eliminar elementos, donde las listas requieren complejidad temporal O(n) (el tiempo crece linealmente con el tamaño de la lista) en el peor de los casos.
Cuándo utilizar:
- Se requieren elementos únicos, asegurando que no haya duplicados en la colección;
- Se necesita una prueba de pertenencia rápida, lo que hace que los conjuntos sean ideales para tareas como verificar la existencia de un elemento;
- Se realizan operaciones como uniones, intersecciones o diferencias de conjuntos, que los conjuntos soportan con métodos optimizados;
- El orden no importa, ya que los conjuntos son inherentemente desordenados y no es necesario mantener el orden de inserción.
1234567891011121314151617181920# Removing duplicates from a list using a set numbers = [1, 3, 2, 3, 5, 4, 5] unique_numbers = set(numbers) print(f'Unique Numbers: {unique_numbers}') # Fast membership testing names = {'Alice', 'Bob', 'Charlie'} print(f'Is Alice in the set? {"Alice" in names}') print(f'Is Eve in the set? {"Eve" in names}') # Set operations: union, intersection, and difference set_a = {1, 4, 3, 2} set_b = {3, 5, 4, 6} print(f'Union: {set_a.union(set_b)}') print(f'Intersection: {set_a.intersection(set_b)}') print(f'Difference: {set_a.difference(set_b)}') # Removing elements from a set safely with discard names.discard('Alice') # Safe removal, no error if the element doesn't exist print(f'Names after removal: {names}')
Ahora comparemos el rendimiento de un conjunto frente a una lista en la prueba de pertenencia:
12345678910111213141516171819import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Create a large list and set with the same elements large_list = list(range(10000000)) large_set = set(large_list) # Test membership for an element at the end element_to_find = 9999999 @timeit_decorator(number=50) def test_membership(element, collection): return element in collection print('List:') print(test_membership(element_to_find, large_list)) print('Set:') print(test_membership(element_to_find, large_set))
Tupla
Las tuplas se utilizan normalmente cuando es necesario garantizar que los datos no puedan ser modificados o como clave en un dict o elemento en un set (ya que las tuplas son hashables).
-
Preferibles a las listas: cuando se requiere datos inmutables, se desea utilizar la colección como clave de diccionario o elemento de conjunto, o cuando se necesita almacenamiento eficiente en memoria para una colección de tamaño fijo;
-
Preferibles a los arrays de NumPy: cuando los datos son no numéricos o cuando la inmutabilidad es fundamental. Aunque los arrays de NumPy están diseñados para cálculos numéricos y son mutables por defecto, las tuplas proporcionan seguridad para datos no numéricos o colecciones pequeñas y estructuradas que deben permanecer constantes.
12345678# Each tuple in the list represents an immutable student record students = [ (1834, 'James', 'Johnson'), (2749, 'Alice', 'Smith'), (4923, 'Bob', 'Brown') ] # Attempting to modify a tuple will raise a TypeError students[0][1] = 'Fred'
Dado que la lista students contiene registros de estudiantes (ID, nombre, apellido) que deben ser solo lectura, es preferible utilizar tuplas para cada registro en lugar de listas. Además, como se mencionó anteriormente, las tuplas son ligeramente más eficientes en memoria en comparación con las listas.
1. ¿Cuál de los siguientes escenarios es más adecuado para usar un conjunto en lugar de una lista?
2. Tienes un conjunto de datos con millones de registros y necesitas comprobar frecuentemente si existen valores específicos en él. ¿Qué estructura de datos es la más eficiente para este propósito?
3. Está creando un registro para cada estudiante que incluye un ID único, nombre y apellido. Los datos no deben modificarse una vez creados. ¿Qué estructura de datos sería la más adecuada?
¡Gracias por tus comentarios!