Operaciones con sets
Clase 17 de 21 • Curso Profesional de Python
Contenido del curso
Luis Lira
Jose Martin Rangel Espinoza
Angel Mejia
Miguel Angel Reyes Moreno
Kevin Mejia
Omar Rodríguez Aldama
Iván Mauricio Jaimes Niño
Carlos Celemín
Sergio Revuelto
Juan Andrade
Max Castillo
Carlos Rodríguez
Edkar Chachati
Carlos José Tun Pinzón
Jonathan Steven Cardozo Toro
Carlos Esteban Lara Gil
Angelica Landazabal
Lucio Paniceres
Juan Carlos Ortiz Romero
Gabriel Missael Barco
JUAN PABLO MAYORGA MENDIETA
Jaime Diaz
Sebastián Andrade
Axel Yaguana
Isabel Yepes
Wilson Delgado
Nelson Porfirio Sanchez Cedron
Anthony Pernia
Jesús Velázquez Jiménez
David Enrique Merchán Cano
Gabriela Andreina García Uzcategui
Cesar Estiven Mesa Medrano
En caso de que quieran hacer operaciones con sets y hacerlo de forma más explícita pueden usar los métodos:
set1.union(set2)
set1.symmetric_difference(set2)
set1.difference(set2)
set1.intersection(set2)
Y pueden encontrar más métodos que pueden serles útiles aquí :D
¿Cuál de las 2 opciones (explicita e implícita) tiene mejor rendimiento?
El que tiene mejor rendimiento son los operadores puesto que las funciones llaman a los mismos por debajo de la capa de abstracción, pero las funciones te permiten añadir una mayor legibilidad a tu código con la nomenclatura y además son reutilizables. Probablemente si no usaras estas funciones predefinidas construirias las tuyas.
Pues esto hice yo, creo que los pokemon se pueden llevar muy bien con la programación (:
pokemon_tipo_fuego = { 'Charizard', 'Moltres' } pokemon_tipo_volador = { 'Charizard', 'Butterfree', 'Pidgeot', 'Fearow', 'Dodrio', 'Gyarados', 'Aerodactyl', 'Articuno', 'Zapdos', 'Moltres', 'Dragonite' } pokemon_tipo_veneno = { 'Butterfree' } pokemon_tipo_normal = { 'Pidgeot', 'Fearow', 'Dodrio' } pokemon_tipo_agua = { 'Gyarados' } pokemon_tipo_roca = { 'Aerodactyl' } pokemon_tipo_hielo = { 'Articuno' } pokemon_tipo_electrico = { 'Zapdos' } pokemon_tipo_dragon = { 'Dragonite' } my_set1 = pokemon_tipo_fuego | pokemon_tipo_agua print(f'Pokemon tipo fuego | agua: {my_set1}') my_set2 = pokemon_tipo_normal & pokemon_tipo_volador print(f'Pokemon tipo normal & volador: {my_set2}') my_set3 = pokemon_tipo_volador - pokemon_tipo_fuego print(f'Pokemon tipo volador - fuego: {my_set3}') my_set4 = pokemon_tipo_dragon ^ pokemon_tipo_electrico print(f'Pokemon tipo dragon ^ electrico: {my_set4}')
Me encantó este ejemplo, sos un crack. 🔥
increíble ejemplo, me encanto
Métodos Set
Una tabla que puede ser útil:
Gracias por el aporte
Set1.isdisjoint(set2) devuelve True si no tienen nada en común (intersección vacía) y False si lo tienen
Reto Cumplido 😄
Code
from platform import system from os import system as console_command # Utility def clean_screen() -> None: """This function is responsible for cleaning the screen.""" if system() == 'Windows': console_command('cls') else: console_command('clear') def sets() -> None: """Multiple Operations with sets""" my_set1 = {'🍎', '🍊', '🍇', '🍓', '🍈'} my_set2 = {'🍉', '🍊', '🍒', '🍓', '🍋'} print(" → Set 1:", my_set1) print(" → Set 2:", my_set2) print('') # Union my_set3 = my_set1 | my_set2 print(" Union :", my_set3) # Intersection my_set4 = my_set1 & my_set2 print("\n Intersection :", my_set4) # Difference my_set5 = my_set1 - my_set2 print("\n Difference set1 - set2 :", my_set5) my_set6 = my_set2 - my_set1 print("\n Difference set2 - set1 :", my_set6) # Symmetric Difference my_set7 = my_set1 ^ my_set2 print("\n Symmetric Difference :", my_set7) if __name__ == '__main__': clean_screen() print("*** O P E R A T I O N S W I T H S E T S ***\n") sets()
buen ejemplo
Tu aporte es grandioso mi amigo.
Operaciones con Sets
Unión
Resultado de juntar todos los elementos que tienen ambos, combinar ambos sets
set_1 = {1, 2, 3} set_2 = {3, 4, 5} set_3 = set_1 | set_2 # -> {1, 2, 3, 4, 5} # O de forma mas explicita set_1.union(set_2) # -> {1, 2, 3, 4, 5}
Intersección
Los que se repiten en ambos sets
set_1 = {1, 2, 3} set_2 = {3, 4, 5} set_3 = set_1 & set_2 # -> {3} # O de forma mas explicita set_1.intersection(set_2) # -> {3}
Diferencia
Tomar dos sets y de uno quitarle todos los elementos que tiene el otro
set_1 = {1, 2, 3} set_2 = {3, 4, 5} set_3 = set_1 - set_2 # -> {1, 2} # O de forma mas explicita set_1.difference(set_2) # -> {1, 2}
Diferencia Simétrica
Tomar todos los elementos exceptos los que se repiten
set_1 = {1, 2, 3} set_2 = {3, 4, 5} set_3 = set_1 ^ set_2 # -> {1, 2, 4, 5} # O de forma mas explicita set_1.symmetric_difference(set_2) # -> {1, 2, 4, 5}
Operaciones con Sets (Unión, Intersección y Diferencia)
Unión: Es el resultado de combinar todos los elementos de los conjuntos. En caso de haber elementos repetidos, estos se eliminan. Se utiliza el operador "pipe" ( | ).
Intersección: Esta operación nos da como resultados los elementos en común de los conjuntos. Utilizamos el operador "ampersand" ( & ).
Diferencia: Nos entrega como resultado el set obtenido de eliminar de un primer set todos los elementos que comunes o que se repiten del segundo set. Se usa el operador "menos" ( - ).
Diferencia Simétrica: Es la operación opuesta a la Intersección, es decir, obtenemos todos los elementos de ambos sets, menos los que se comparten. El operador "caret" ( ^ ) es el utilizado para esta operación.
Modifique este para entenderlo mejor Diferencia: Tendremos como resultado los valores que no se repiten del primer set y no mostrara los que tienen en común o los que son diferentes del segundo set. Se usa el operador “menos” ( - ).
APUNTES DE OPERACIONES CON SETS :snake:
| simbolo | nombre |
|---|---|
| l | Unión |
| & | Intersección |
| - | Diferencia |
| ^ | Diferencia simétrica |
Union
El resultado de combinar todos los elementos de dos sets
my_set1 = { 3, 4, 5} my_set2 = { 5, 6, 7} my_set3 = my_set1 | my_set2 print(my_set3) # {3, 4, 5, 6, 7}
se usa el operador | para combinar sets
intersección
Combinar ambos sets y quedarme solo con los que tienen elementos en común
my_set1 = { 3, 4, 5} my_set2 = { 5, 6, 7} my_set3 = my_set1 & my_set2 print(my_set3) #{5}
se usa el & para que se intercepten
Diferencia
La diferencia es el resultado de tomar 2 sets y de uno quitar los elementos que tiene el otro. usamos el operador -
my_set1 = { 3, 4, 5} my_set2 = { 5, 6, 7} my_set3 = my_set1 - my_set2 my_set4 = my_set2 - my_set1 print(my_set4) # {3,4} # {6,7}
Diferencia simétrica
Lo contrario de la intercepción. Me quedo con los elementos que no se comparten entre los dos sets. se usa el operador ^
my_set1 = { 3, 4, 5} my_set2 = { 5, 6, 7} my_set3 = my_set1 ^ my_set2 print(my_set3) #{3,4,6,7}
^ = Acento circunflejo El nombre con el que se conoce este signo.
Al hablar de operaciones matemáticas, creo sería más adecuado llamarle símbolo de potencia, potencia o exponente :D Pero sí, ortográficamente hablando "acento circunflejo" es su nombre
En realidad, en Python existen dos clases para representar conjuntos: set y frozenset. La principal diferencia es que set es mutable, por lo que después de ser creado, se pueden añadir y/o eliminar elementos del conjunto, como veremos en secciones posteriores. Por su parte, frozenset es inmutable y su contenido no puede ser modificado una vez que ha sido inicializado.
Operaciones con sets
Podemos operaro con set:
my_set3 = my_set1 | my_set2.my_set3 = my_set1 & my_set2. 🤯my_set3 = my_set1 - my_set2. Es importante notar que my_set1 - my_set2 != my_set2 - my_set1.my_set3 = my_set1 ^ my_set2.También podemos usar los métodos para que sea más explicito, que son:
set1.union(set2) set1.symmetric_difference(set2) set1.difference(set2) set1.intersection(set2)
Ejemplo con sets:
def main(): set1 = {1, 2, 3.5, True, "Juan", "María"} set2 = {0, 2, 3.1, False, "Juan", "Missael"} print(f"set1 = {set1}") print(f"set2 = {set2}") # union print(f"set1 + set2 = {set1 | set2}") # difference print(f"set2 - set1 = {set2 - set1}") print(f"set1 - set2 = {set1.difference(set2)}") # symmetric difference print(f"set1 ^ set2 = {set1 ^ set2}") # intersection print(f"set1 & set2 = {set1 & set2}") if __name__=='__main__': main()
El output:
set1 = {1, 2, 3.5, 'María', 'Juan'} set2 = {0, 2, 3.1, 'Missael', 'Juan'} set1 + set2 = {0, 1, 2, 3.5, 3.1, 'Missael', 'María', 'Juan'} set2 - set1 = {0, 'Missael', 3.1} set1 - set2 = {1, 'María', 3.5} set1 ^ set2 = {0, 1, 3.1, 'Missael', 3.5, 'María'} set1 & set2 = {2, 'Juan'}
otra utilidad de los sets se ve en operaciones espaciales en los sistemas de información geográfica. Basados en la posición de los elementos en el espacio se pueden calcular uniones, intersacciones, diferencias simetricas que permiten realizar analisis muy interesantes.
alguien se acuerda de esta serie: fue muy buena hasta la 6 temporada u.u
casa_stark = {"Jon", "Ned", "Bran", "Arya", "Sansa"} casa_targaryen = {"Jon", "Daenerys", "Viserys", "Raegar"} #union my_set3 = casa_stark | casa_targaryen print(my_set3) #interseccion my_set4 = casa_stark & casa_targaryen print(my_set4) #diferencia my_set5 = casa_stark - casa_targaryen print(my_set5) my_set5 = casa_targaryen - casa_stark print(my_set5) #diferencia simetrica my_set6 = casa_stark ^ casa_targaryen print(my_set6)
Alguien sabe como se hace el simbolo del exponente o el hat en Ubuntu?
Hola. Intenta con las teclas alt+94. También suele estar sobre la tecla del número 6 en los teclados en inglés, o al lado de la tecla p en teclados en español. ^
A mí me sale con Alt Gr + { (dos veces) -> ^
Genero una lista aleatoria de numeros que luego los convierto a un set y realizo las operaciones vistas en clase.
import random def show(name_operation,operation): print(f'\n{name_operation}: ') print(f'\t {operation} ') def run(): my_list1 = [random.randint(1,10) for _ in range(0,10)] my_list2 = [random.randint(1,10) for _ in range(0,10)] set_1= set(my_list1) set_2= set(my_list2) print(f'\n\tList 1: {my_list1}') print(f'\tList 2: {my_list2}') print(f'\n\tset 1: {set_1}') print(f'\tset 2: {set_2}') show('Union',set_1 | set_2) show('Intersection',set_1 & set_2) show('Difference',set_1 - set_2) show('Symmetric difference',set_1 ^ set_2) if __name__ == '__main__': run()
Les dejo mi ejemplo para el reto de esta clase:
def run(): data_engineer_tools = {'Python', 'SQL', 'PostgreSQL', 'MongoDB', 'Apache Spark', 'Apache Kafka', 'Amazon Redshift', 'Snowflake', 'Amazon Athena', 'Apache Airflow'} data_analyst_tools = {'R', 'Python', 'Microsoft Excel', 'Tableau', 'RapidMiner', 'KNIME', 'Power BI', 'Apache Spark', 'QlikView', 'Taled'} #Union union_set = data_engineer_tools | data_analyst_tools print(union_set) #Intersection intersection_set = data_engineer_tools & data_analyst_tools print(intersection_set) #Difference difference_set = data_engineer_tools - data_analyst_tools print(difference_set) #symmetric difference sym_diff_set = data_engineer_tools ^ data_analyst_tools print(sym_diff_set) if __name__ == '__main__': run()
Dejo mi aporte.
my_set1 = {1, 2, 3, 4} my_set2 = {3,4,5,6} my_set3 = my_set1 | my_set2 ##Union, me uno todos los elementos, y los duplicados no los agrego print(f"union = {my_set3}") my_set4 = my_set1 & my_set2 ##Interseccion, me tomo los elementos que esten en ambos sets print(f"interseccion = {my_set4}") my_set5 = my_set1 - my_set2 ##Diferencia, me tomo los elementos que esten en el set1 pero no en set2 print(f"diferencia = {my_set5}") my_set6 = my_set1 ^ my_set2 ##Diferencia simetrica, me tomo los elementos que esten en el set1 o en set2, pero no en ambos print(f"diferencia simetrica = {my_set6}")
Union Operator |
Intersection Operator &
Difference Operator -
Symmetric Difference Operator ^
set1 = {"David","Enrique","Johanna","Andrea","Felipe","Juan"} print("set1: ",set1) set2 = {'Enrique',"Andrea","Juan", "Carlos", "Pedro"} print("set2: ",set2) set3 = set1 | set2 print("Union: ",set3) set4 = set1 & set2 print("Intersection: ",set4) set5 = set1 - set2 print("difference: ",set5) set6 = set2 - set1 print("difference: ",set6) set7 = set1 ^ set2 print("symetric difference: ",set7)
Reto completado :)
Desafio :
set1 = {1, 2, 3} set2 = {3, 4, 5} set = set1 | set2 print(set) set3 = set1 & set2 print(set3) set4 = set1 - set2 print(set4) set5 = set1 ^ set2 print(set5)