Conjuntos en Python

Un conjunto es un tipo de datos de colección desordenada que es iterable, mutable y no tiene elementos duplicados. 

El conjunto se define en { }

La principal ventaja de usar un conjunto, a diferencia de una lista, es que tiene un método altamente optimizado para verificar si un elemento específico está contenido en el conjunto. Esto se basa en una estructura de datos conocida como tabla hash . Dado que los conjuntos no están ordenados, no podemos acceder a los elementos mediante índices como lo hacemos en las listas .

Ejemplos de conjuntos

Python3

var = {"Geeks", "for", "Geeks"}
type(var)

Producción:

set

Los métodos set() se utilizan para la conversión de tipos en Python.

Python3

# Python program to
# demonstrate sets
 
# Same as {"a", "b", "c"}
myset = set(["a", "b", "c"])
print(myset)
 
# Adding element to the set
myset.add("d")
print(myset)
Producción: 

{'c', 'b', 'a'}
{'d', 'c', 'b', 'a'}

 

Conjuntos congelados de Python

Los conjuntos congelados en Python son objetos inmutables que solo admiten métodos y operadores que producen un resultado sin afectar el conjunto o conjuntos congelados a los que se aplican. Se puede hacer con el método frozenset() en Python.

Si bien los elementos de un conjunto se pueden modificar en cualquier momento, los elementos del conjunto congelado siguen siendo los mismos después de la creación. 

Si no se pasan parámetros, devuelve un conjunto congelado vacío.

Python

# Python program to demonstrate differences
# between normal and frozen set
 
# Same as {"a", "b","c"}
normal_set = set(["a", "b","c"])
 
print("Normal Set")
print(normal_set)
 
# A frozen set
frozen_set = frozenset(["e", "f", "g"])
 
print("\nFrozen Set")
print(frozen_set)
 
# Uncommenting below line would cause error as
# we are trying to add element to a frozen set
# frozen_set.add("h")
Producción: 

Normal Set
set(['a', 'c', 'b'])

Frozen Set
frozenset(['e', 'g', 'f'])

 

Funcionamiento interno de Set

Esto se basa en una estructura de datos conocida como tabla hash
Si hay varios valores presentes en la misma posición de índice, el valor se agrega a esa posición de índice para formar una lista enlazada. En Python, los conjuntos se implementan utilizando un diccionario con variables ficticias, donde la clave es el conjunto de miembros con mayores optimizaciones a la complejidad del tiempo.

Establecer implementación:

 

Conjuntos con Numerosas operaciones en una sola HashTable:

Métodos para conjuntos

Agregar elementos

La inserción en el conjunto se realiza a través de la función set.add(), donde se crea un valor de registro apropiado para almacenar en la tabla hash. Igual que verificar un artículo, es decir, O(1) en promedio. Sin embargo, en el peor de los casos puede convertirse en O(n).

Python3

# A Python program to
# demonstrate adding elements
# in a set
 
# Creating a Set
people = {"Jay", "Idrish", "Archi"}
 
print("People:", end = " ")
print(people)
 
# This will add Daxit
# in the set
people.add("Daxit")
 
# Adding elements to the
# set using iterator
for i in range(1, 6):
    people.add(i)
 
print("\nSet after adding element:", end = " ")
print(people)
Producción: 

People: {'Idrish', 'Archi', 'Jay'}

Set after adding element: {1, 2, 3, 4, 5, 'Idrish', 'Archi', 'Jay', 'Daxit'}

 

Unión

Se pueden fusionar dos conjuntos usando la función union() o | operador. Se accede a ambos valores de la tabla hash y se recorren con la operación de fusión realizada en ellos para combinar los elementos, al mismo tiempo que se eliminan los duplicados. La complejidad temporal de esto es O (len (s1) + len (s2)) donde s1 y s2 son dos conjuntos cuya unión debe realizarse.
 

Python3

# Python Program to
# demonstrate union of
# two sets
 
people = {"Jay", "Idrish", "Archil"}
vampires = {"Karan", "Arjun"}
dracula = {"Deepanshu", "Raju"}
 
# Union using union()
# function
population = people.union(vampires)
 
print("Union using union() function")
print(population)
 
# Union using "|"
# operator
population = people|dracula
 
print("\nUnion using '|' operator")
print(population)
Producción: 

Union using union() function
{'Karan', 'Idrish', 'Jay', 'Arjun', 'Archil'}

Union using '|' operator
{'Deepanshu', 'Idrish', 'Jay', 'Raju', 'Archil'}

 

Intersección

Esto se puede hacer a través de la intersection() o el operador &. Se seleccionan elementos comunes. Son similares a la iteración sobre las listas Hash y la combinación de los mismos valores en ambas tablas. La complejidad temporal de esto es O(min(len(s1), len(s2)) donde s1 y s2 son dos conjuntos cuya unión debe hacerse.

Python3

# Python program to
# demonstrate intersection
# of two sets
 
set1 = set()
set2 = set()
 
for i in range(5):
    set1.add(i)
 
for i in range(3,9):
    set2.add(i)
 
# Intersection using
# intersection() function
set3 = set1.intersection(set2)
 
print("Intersection using intersection() function")
print(set3)
 
# Intersection using
# "&" operator
set3 = set1 & set2
 
print("\nIntersection using '&' operator")
print(set3)
Producción: 

Intersection using intersection() function
{3, 4}

Intersection using '&' operator
{3, 4}

 

Diferencia

Para encontrar la diferencia entre conjuntos. Similar a encontrar la diferencia en la lista enlazada. Esto se hace a través del operador difference() o –. La complejidad temporal de encontrar la diferencia s1 – s2 es O(len(s1))

Python3

# Python program to
# demonstrate difference
# of two sets
 
set1 = set()
set2 = set()
 
for i in range(5):
    set1.add(i)
 
for i in range(3,9):
    set2.add(i)
 
# Difference of two sets
# using difference() function
set3 = set1.difference(set2)
 
print(" Difference of two sets using difference() function")
print(set3)
 
# Difference of two sets
# using '-' operator
set3 = set1 - set2
 
print("\nDifference of two sets using '-' operator")
print(set3)
Producción: 

Difference of two sets using difference() function
{0, 1, 2}

Difference of two sets using '-' operator
{0, 1, 2}

 

Juegos de compensación

El método Clear() vacía todo el conjunto.

Python3

# Python program to
# demonstrate clearing
# of set
 
set1 = {1,2,3,4,5,6}
 
print("Initial set")
print(set1)
 
# This method will remove
# all the elements of the set
set1.clear()
 
print("\nSet after using clear() function")
print(set1)
Producción: 

Initial set
{1, 2, 3, 4, 5, 6}

Set after using clear() function
set()

 

Sin embargo, hay dos problemas principales en los conjuntos de Python: 

  1. El conjunto no mantiene los elementos en ningún orden en particular.
  2. Solo se pueden agregar instancias de tipos inmutables a un conjunto de Python.

Complejidad temporal de conjuntos

Operación Caso promedio Peor de los casos notas
x en s O(1) En)  
unión s|t O(largo(s)+largo(t))    
Intersección s&t O(mín(largo(s), largo(t)) O(largo(s) * largo(t)) reemplace «min» con «max» si t no es un conjunto
Intersección múltiple s1&s2&..&sn   (n-1)*O(l) donde l es max(len(s1),..,len(sn))  
Punto de diferencia O(largo(s))    

Operadores para conjuntos

Los conjuntos y los conjuntos congelados admiten los siguientes operadores:

Operadores notas
clave en s verificación de contención
clave no en s verificación de no contención
s1 == s2 s1 es equivalente a s2
s1 != s2 s1 no es equivalente a s2
s1 <= s2 s1 es un subconjunto de s2
s1 < s2 s1 es un subconjunto propio de s2
s1 >= s2 s1 es superconjunto de s2
s1 > s2 s1 es el superconjunto propio de s2
s1 | s2 la unión de s1 y s2
s1 y s2 la intersección de s1 y s2
s1-s2 el conjunto de elementos en s1 pero no en s2
s1 s2 el conjunto de elementos en precisamente uno de s1 o s2

Fragmento de código para ilustrar todas las operaciones Set en Python

Python

# Python program to demonstrate working# of
# Set in Python
 
# Creating two sets
set1 = set()
set2 = set()
 
# Adding elements to set1
for i in range(1, 6):
    set1.add(i)
 
# Adding elements to set2
for i in range(3, 8):
    set2.add(i)
 
print("Set1 = ", set1)
print("Set2 = ", set2)
print("\n")
 
# Union of set1 and set2
set3 = set1 | set2# set1.union(set2)
print("Union of Set1 & Set2: Set3 = ", set3)
 
# Intersection of set1 and set2
set4 = set1 & set2# set1.intersection(set2)
print("Intersection of Set1 & Set2: Set4 = ", set4)
print("\n")
 
# Checking relation between set3 and set4
if set3 > set4: # set3.issuperset(set4)
    print("Set3 is superset of Set4")
else if set3 < set4: # set3.issubset(set4)
    print("Set3 is subset of Set4")
else : # set3 == set4
    print("Set3 is same as Set4")
 
# displaying relation between set4 and set3
if set4 < set3: # set4.issubset(set3)
    print("Set4 is subset of Set3")
    print("\n")
 
# difference between set3 and set4
set5 = set3 - set4
print("Elements in Set3 and not in Set4: Set5 = ", set5)
print("\n")
 
# check if set4 and set5 are disjoint sets
if set4.isdisjoint(set5):
    print("Set4 and Set5 have nothing in common\n")
 
# Removing all the values of set5
set5.clear()
 
print("After applying clear on sets Set5: ")
print("Set5 = ", set5)
Producción: 

('Set1 = ', set([1, 2, 3, 4, 5]))
('Set2 = ', set([3, 4, 5, 6, 7]))


('Union of Set1 & Set2: Set3 = ', set([1, 2, 3, 4, 5, 6, 7]))
('Intersection of Set1 & Set2: Set4 = ', set([3, 4, 5]))


Set3 is superset of Set4
Set4 is subset of Set3


('Elements in Set3 and not in Set4: Set5 = ', set([1, 2, 6, 7]))


Set4 and Set5 have nothing in common

After applying clear on sets Set5: 
('Set5 = ', set([]))

 

Artículos recientes sobre Python Set.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *