Jason
PkPower déjame poner tildes en mi nick ¬¬
Clase 10: conjuntos
Clase 10: conjuntos
Espero que estén emocionados, ya casi estamos en la mitad del curso. Hoy toca ver conjuntos, algo que me pareció buena idea enseñarles para que luego puedan dejar volar su imaginación y puedan jugar a gusto con estas estructuras de datos.
Definición de Conjunto:
Un conjunto es una colección de datos no ordenados ni repetidos, así de simple. Normalmente lidiamos con los conjuntos matemáticos en la escuela o en este mismo curso, a la hora de diferenciar entre ints (conjunto de los enteros) y floats (decimales, o más correctamente, el conjunto de los números racionales).
Conjuntos en programación:
Un conjunto en programación tiene la misma definición y sigue las mismas reglas. Su sintaxis es que los elementos del conjunto van separados por comas y todo dentro de llaves ({, }), como los diccionarios, pero sin las llaves.
Conjunto vacío:
Un conjunto vacío no se crea
porque eso lo que hace es crear un diccionario vacío, aquí la única forma de crear un conjunto vacío es:
Crear un conjunto con elementos:
Noten que el elemento 'pera' aparece dos veces, si luego lo printeamos:
¿Ven que 'piña' ahora está después de 'arandano'? Eso es porque a diferencia de las listas y tuplas, los conjuntos no están ordenados. Esto también implica que no podemos llamar a algún elemento por su índice.
Añadir elementos a un conjunto:
Para añadir elementos a un conjunto usaremos el método
Explicación sobre la relación entre dos conjuntos:
Sean dos conjuntos A y B, se puede tener que:
1) A pertenezca a B. Esto es cuando el los elementos del conjunto A están también en el conjunto B, pero B tiene también elementos que no están en A.
2) A es idénticamente igual a B. Esto pasa cuando todos los elementos del conjunto A están en el conjunto B y todos los elementos del conjunto B están en el conjunto A
3) Conjuntos intersectados. Tomemos el conjunto A con n elementos (n entero positivo) y B con m elementos (m entero positivo). Dos conjuntos estarán intersectados cuando existe un número k de elementos (k entero positivo, k menor a n y k menor a m) que estarán tanto en el conjunto A como en el conjunto B.
4) Conjuntos independientes. Esto ocurre cuando los conjuntos A y B no tienen elementos en común.
Operaciones sobre conjuntos:
1) Unión: la unión retorna un conjunto con todos los elementos que están en A o en B (aquí estoy poniendo a prueba lo que aprendieron en la clase de lógica proposicional, lean con cuidado ).
2) Intersección: esto lo que hace es retornar los elementos que están en A y en B.
3) Resta de dos conjuntos: es cuando a un conjunto le restas los elementos de otro conjunto. Ojo, aquí no existen "elementos negativos", por lo que si estoy operando
El retorno será simplemente:
Es decir, si estoy resando B a A, los elementos que están en B pero no en A no influirán en el resultado.
4) Exclusión: (nombre inventado) Si tenemos dos conjuntos intersectados no idénticamente iguales y no uno contenido en otro, podemos buscar todos los elementos que estén únicamente en A o únicamente en B (a esto se le llama una disyunción exclusiva, que a diferencia de la que les enseñé en la clase 4, esta disyunción tiene por tabla de verdad True 'or' True == False).
Pertenencia a un conjunto:
Si queremos comprobar si un elemento pertenece o no a un conjunto, basta con
elemento in conjunto
En cambio, si queremos comprobar que un conjunto (llamémoslo A) está dentro de otro (que sea B), usamos el método set.issuperset() de la siguiente forma:
O, podemos usar el método set.issubset():
Al igual que con listas y diccionarios, los conjuntos al asignarse a dos o más variables continúan siendo fundamentalmente el mismo conjunto, por lo que modificarlo en una de las variables lo modifica en toda, por lo tanto tenemos también el método copy() para solucionarnos la existencia.
Función help() de python:
Ya es momento de que aprendan a usar esta maravilla del universo, la propia documentación de python.
Si en el idle escriben
y lo ejecutan, van a salir muchas cosas escritas en azul, eso que sale es todo lo que pueden hacer con los conjuntos, explicado de forma breve. Al final del post les dejo lo que sale.
Ejercicios:
1) Hagan un programa que realice las operaciones que se puede hacer con conjuntos (|, &, - y ^) pero con listas. También un programa que a partir de una lista con elementos repetidos (o no), retorne otra lista con los elementos de la primera pero no repetidos. Restricción: no pueden usar conjuntos para esto.
2) Expliquen qué pasa si aplican la función set() a las otras estructuras de datos que vimos (strings, listas, tuplas y diccionarios) y lo que sucede cuando aplican las funciones list(), tuple(), str() y dict() a un conjunto.
3) Los conjuntos pueden sernos útiles a la hora de programar un juego de pokémon cuando el juego debe decir cuántas especies de pokémon han sido atrapadas y/o avistadas. Nombren otra situación para la que son útiles.
4) Practiquen por su cuenta, experimentando, el uso de conjuntos. Aprendan a usar los métodos que aparecen en la documentación de python.
Clase 10: conjuntos
Espero que estén emocionados, ya casi estamos en la mitad del curso. Hoy toca ver conjuntos, algo que me pareció buena idea enseñarles para que luego puedan dejar volar su imaginación y puedan jugar a gusto con estas estructuras de datos.
Definición de Conjunto:
Un conjunto es una colección de datos no ordenados ni repetidos, así de simple. Normalmente lidiamos con los conjuntos matemáticos en la escuela o en este mismo curso, a la hora de diferenciar entre ints (conjunto de los enteros) y floats (decimales, o más correctamente, el conjunto de los números racionales).
Conjuntos en programación:
Un conjunto en programación tiene la misma definición y sigue las mismas reglas. Su sintaxis es que los elementos del conjunto van separados por comas y todo dentro de llaves ({, }), como los diccionarios, pero sin las llaves.
Conjunto vacío:
Un conjunto vacío no se crea
Código:
conjunto = {}
Código:
conjunto = set()
Código:
conjunto_de_ejemplo = {'manzana', 'pera', 'piña', 'pera', 'arandano'}
Código:
print(conjunto_de_ejemplo)
Código:
{'manzana', 'pera', 'arandano', 'piña'}
Añadir elementos a un conjunto:
Para añadir elementos a un conjunto usaremos el método
Código:
set.add(cosa_que_queremos_meter)
Explicación sobre la relación entre dos conjuntos:
Sean dos conjuntos A y B, se puede tener que:
1) A pertenezca a B. Esto es cuando el los elementos del conjunto A están también en el conjunto B, pero B tiene también elementos que no están en A.
2) A es idénticamente igual a B. Esto pasa cuando todos los elementos del conjunto A están en el conjunto B y todos los elementos del conjunto B están en el conjunto A
3) Conjuntos intersectados. Tomemos el conjunto A con n elementos (n entero positivo) y B con m elementos (m entero positivo). Dos conjuntos estarán intersectados cuando existe un número k de elementos (k entero positivo, k menor a n y k menor a m) que estarán tanto en el conjunto A como en el conjunto B.
4) Conjuntos independientes. Esto ocurre cuando los conjuntos A y B no tienen elementos en común.
Operaciones sobre conjuntos:
1) Unión: la unión retorna un conjunto con todos los elementos que están en A o en B (aquí estoy poniendo a prueba lo que aprendieron en la clase de lógica proposicional, lean con cuidado ).
Código:
a = {'manzana', 'pera', 'higo', 'ciruelas', 'damascos'}
b = {'huevos', 'leche', 'plátanos', 'damascos', 'pera', 'piña'}
c = a|b # el operador de unión es esta [COLOR="DarkOrange"][B][U][URL="https://es.wikipedia.org/wiki/Pleca"]barra vertical[/URL][/U][/B][/COLOR]: |
print(c)
Código:
{'manzana', 'huevos', 'ciruelas', 'higo', 'plátanos', 'leche', 'pera', 'damascos', 'piña'}
Código:
a = {'manzana', 'pera', 'higo', 'ciruelas', 'damascos'}
b = {'huevos', 'leche', 'plátanos', 'damascos', 'pera', 'piña'}
c = a&b # el operador de intersección es &
print(c)
Código:
{'pera', 'damascos'}
Código:
a = {1, 2, 3}
b = {2, 3, 4}
print(a - b)
Código:
{1}
4) Exclusión: (nombre inventado) Si tenemos dos conjuntos intersectados no idénticamente iguales y no uno contenido en otro, podemos buscar todos los elementos que estén únicamente en A o únicamente en B (a esto se le llama una disyunción exclusiva, que a diferencia de la que les enseñé en la clase 4, esta disyunción tiene por tabla de verdad True 'or' True == False).
Código:
a = {1, 2, 3}
b = {2, 3, 4}
print(a ^ b)
Código:
{1, 4}
Pertenencia a un conjunto:
Si queremos comprobar si un elemento pertenece o no a un conjunto, basta con
elemento in conjunto
En cambio, si queremos comprobar que un conjunto (llamémoslo A) está dentro de otro (que sea B), usamos el método set.issuperset() de la siguiente forma:
Código:
B.issuperset(A) #nos dice si A pertenece a B
Código:
A.issubset(B) #nos dice si B está contenido en A
Función help() de python:
Ya es momento de que aprendan a usar esta maravilla del universo, la propia documentación de python.
Si en el idle escriben
Código:
help(set)
Ejercicios:
1) Hagan un programa que realice las operaciones que se puede hacer con conjuntos (|, &, - y ^) pero con listas. También un programa que a partir de una lista con elementos repetidos (o no), retorne otra lista con los elementos de la primera pero no repetidos. Restricción: no pueden usar conjuntos para esto.
2) Expliquen qué pasa si aplican la función set() a las otras estructuras de datos que vimos (strings, listas, tuplas y diccionarios) y lo que sucede cuando aplican las funciones list(), tuple(), str() y dict() a un conjunto.
3) Los conjuntos pueden sernos útiles a la hora de programar un juego de pokémon cuando el juego debe decir cuántas especies de pokémon han sido atrapadas y/o avistadas. Nombren otra situación para la que son útiles.
4) Practiquen por su cuenta, experimentando, el uso de conjuntos. Aprendan a usar los métodos que aparecen en la documentación de python.
Help on set object:
class set(object)
| set() -> new empty set object
| set(iterable) -> new set object
|
| Build an unordered collection of unique elements.
|
| Methods defined here:
|
| __and__(self, value, /)
| Return self&value.
|
| __contains__(...)
| x.__contains__ <==> y in x.
|
| __eq__(self, value, /)
| Return self==value.
|
| __ge__(self, value, /)
| Return self>=value.
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __gt__(self, value, /)
| Return self>value.
|
| __iand__(self, value, /)
| Return self&=value.
|
| __init__(self, /, *args, **kwargs)
| Initialize self. See help(type(self)) for accurate signature.
|
| __ior__(self, value, /)
| Return self|=value.
|
| __isub__(self, value, /)
| Return self-=value.
|
| __iter__(self, /)
| Implement iter(self).
|
| __ixor__(self, value, /)
| Return self^=value.
|
| __le__(self, value, /)
| Return self<=value.
|
| __len__(self, /)
| Return len(self).
|
| __lt__(self, value, /)
| Return self<value.
|
| __ne__(self, value, /)
| Return self!=value.
|
| __new__(*args, **kwargs) from builtins.type
| Create and return a new object. See help(type) for accurate signature.
|
| __or__(self, value, /)
| Return self|value.
|
| __rand__(self, value, /)
| Return value&self.
|
| __reduce__(...)
| Return state information for pickling.
|
| __repr__(self, /)
| Return repr(self).
|
| __ror__(self, value, /)
| Return value|self.
|
| __rsub__(self, value, /)
| Return value-self.
|
| __rxor__(self, value, /)
| Return value^self.
|
| __sizeof__(...)
| S.__sizeof__() -> size of S in memory, in bytes
|
| __sub__(self, value, /)
| Return self-value.
|
| __xor__(self, value, /)
| Return self^value.
|
| add(...)
| Add an element to a set.
|
| This has no effect if the element is already present.
|
| clear(...)
| Remove all elements from this set.
|
| copy(...)
| Return a shallow copy of a set.
|
| difference(...)
| Return the difference of two or more sets as a new set.
|
| (i.e. all elements that are in this set but not the others.)
|
| difference_update(...)
| Remove all elements of another set from this set.
|
| discard(...)
| Remove an element from a set if it is a member.
|
| If the element is not a member, do nothing.
|
| intersection(...)
| Return the intersection of two sets as a new set.
|
| (i.e. all elements that are in both sets.)
|
| intersection_update(...)
| Update a set with the intersection of itself and another.
|
| isdisjoint(...)
| Return True if two sets have a null intersection.
|
| issubset(...)
| Report whether another set contains this set.
|
| issuperset(...)
| Report whether this set contains another set.
|
| pop(...)
| Remove and return an arbitrary set element.
| Raises KeyError if the set is empty.
|
| remove(...)
| Remove an element from a set; it must be a member.
|
| If the element is not a member, raise a KeyError.
|
| symmetric_difference(...)
| Return the symmetric difference of two sets as a new set.
|
| (i.e. all elements that are in exactly one of the sets.)
|
| symmetric_difference_update(...)
| Update a set with the symmetric difference of itself and another.
|
| union(...)
| Return the union of sets as a new set.
|
| (i.e. all elements that are in either set.)
|
| update(...)
| Update a set with the union of itself and others.
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __hash__ = None
class set(object)
| set() -> new empty set object
| set(iterable) -> new set object
|
| Build an unordered collection of unique elements.
|
| Methods defined here:
|
| __and__(self, value, /)
| Return self&value.
|
| __contains__(...)
| x.__contains__ <==> y in x.
|
| __eq__(self, value, /)
| Return self==value.
|
| __ge__(self, value, /)
| Return self>=value.
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __gt__(self, value, /)
| Return self>value.
|
| __iand__(self, value, /)
| Return self&=value.
|
| __init__(self, /, *args, **kwargs)
| Initialize self. See help(type(self)) for accurate signature.
|
| __ior__(self, value, /)
| Return self|=value.
|
| __isub__(self, value, /)
| Return self-=value.
|
| __iter__(self, /)
| Implement iter(self).
|
| __ixor__(self, value, /)
| Return self^=value.
|
| __le__(self, value, /)
| Return self<=value.
|
| __len__(self, /)
| Return len(self).
|
| __lt__(self, value, /)
| Return self<value.
|
| __ne__(self, value, /)
| Return self!=value.
|
| __new__(*args, **kwargs) from builtins.type
| Create and return a new object. See help(type) for accurate signature.
|
| __or__(self, value, /)
| Return self|value.
|
| __rand__(self, value, /)
| Return value&self.
|
| __reduce__(...)
| Return state information for pickling.
|
| __repr__(self, /)
| Return repr(self).
|
| __ror__(self, value, /)
| Return value|self.
|
| __rsub__(self, value, /)
| Return value-self.
|
| __rxor__(self, value, /)
| Return value^self.
|
| __sizeof__(...)
| S.__sizeof__() -> size of S in memory, in bytes
|
| __sub__(self, value, /)
| Return self-value.
|
| __xor__(self, value, /)
| Return self^value.
|
| add(...)
| Add an element to a set.
|
| This has no effect if the element is already present.
|
| clear(...)
| Remove all elements from this set.
|
| copy(...)
| Return a shallow copy of a set.
|
| difference(...)
| Return the difference of two or more sets as a new set.
|
| (i.e. all elements that are in this set but not the others.)
|
| difference_update(...)
| Remove all elements of another set from this set.
|
| discard(...)
| Remove an element from a set if it is a member.
|
| If the element is not a member, do nothing.
|
| intersection(...)
| Return the intersection of two sets as a new set.
|
| (i.e. all elements that are in both sets.)
|
| intersection_update(...)
| Update a set with the intersection of itself and another.
|
| isdisjoint(...)
| Return True if two sets have a null intersection.
|
| issubset(...)
| Report whether another set contains this set.
|
| issuperset(...)
| Report whether this set contains another set.
|
| pop(...)
| Remove and return an arbitrary set element.
| Raises KeyError if the set is empty.
|
| remove(...)
| Remove an element from a set; it must be a member.
|
| If the element is not a member, raise a KeyError.
|
| symmetric_difference(...)
| Return the symmetric difference of two sets as a new set.
|
| (i.e. all elements that are in exactly one of the sets.)
|
| symmetric_difference_update(...)
| Update a set with the symmetric difference of itself and another.
|
| union(...)
| Return the union of sets as a new set.
|
| (i.e. all elements that are in either set.)
|
| update(...)
| Update a set with the union of itself and others.
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __hash__ = None
Última edición: