Sets en Python

8 de agosto de 2018

Sets en python

Los sets nos permiten almacenar varios valores en una variable. Los valores almacenados pueden ser números enteros, números decimales, strings / cadenas de caracteres, listas / lists, diccionarios... Cada valor es un elemento / element.

¡Las listas también nos permiten almacenar varios valores en una variable! La diferencia entre un set y una lista es que en el set no se permite la existencia de elementos duplicados, de elementos con el mismo valor.

Para crear un set que almacene varias strings / cadenas de caracteres usaremos el siguiente código:

mi_primer_set = {
"Alain",
"Benjamin",
"Garcia",
"Gomez"
}

# mi_primer_set es el nombre de la variable que almacenará mi set
# este es un set que almacena strings, cadenas de caracteres
# entre  llaves estará el contenido de nuestro set { }
# cada elemento del set estará separado por una coma  ( , )
# el set almacena strings, por lo que cada string va entre comillas

Es posible crear un set que almacene solo números enteros:

mi_set_de_numeros = {
1,
2,
3,
4,
5,
6}

# mi_set_de_numeros es el nombre de la variable que almacenará mi set
# este es una set que almacena números enteros
# entre  llaves cuadrados estará el contenido de nuestro set { }
# cada elemento del set estará separado por una coma  ( , )
# como cada elemento es un número entero, no necesitamos poner comillas para cada elemento

Es posible crear un set que almacene solo números decimales:

mi_set_con_decimales = {
1.5,
2.3,
3.7,
4.8,
5.8,
6.8
}

# mi_set_con_decimales es el nombre de la variable que almacenará mi set
# este es una set que almacena números enteros
# entre  llaves estará el contenido de nuestra set { }
# cada elemento del set estará separado por una coma  ( , )
# como cada elemento es un número decimal, no necesitamos poner comillas para cada elemento

Es posible crear un set que almacene números enteros, números decimales y strings / cadenas de caracteres:

mi_set_campechano = {
1.5,
2,
"El América ha ganado 37 campeonatos en torneos nacionales e internacionales"
}

#mi_set_campechano es el nombre de la variable que almacenará mi set
# este es un set que almacena números enteros, números decimales y strings
# entre  llaves estará el contenido de nuestro set { }
# cada elemento del set estará separado por una coma  ( , )
# los números decimales y enteros no necesitan estar entre comillas
# las strings van ente comillas

Hasta aquí no ha nada novedoso en lo sets. ¡Parecieran ser lists! La gran diferencia entre los sets y las lists es que los sets no permiten elementos duplicados, elementos con el mismo valor. Ejemplo:

mi_set = {
1, #creo un elemento con el valor 1
1,  #creo otro elemento con el valor 1
1,  #creo otro elemento con el valor 1
1,  #creo otro elemento con el valor 1
1,  #creo otro elemento con el valor 1
1,  #creo otro elemento con el valor 1
1,  #creo otro elemento con el valor 1
}

# mi_set es el nombre de la variable que almacenará mi set
# al crearlo, varios elementos tienen el mismo valor
# el set no permite elementos duplicados, elementos con el mismo valor.

print(mi_set)
#mostramos el set

# muestra en pantalla set([1])
# ¡el set sólo tiene un elemento!

el set no permite elementos duplicados, elementos con el mismo valor.

Sets multidimensionales en python

Por ahora, no es posible crear un set que almacene otros sets, listas o dictionaries con el objetivo de crear con ello un set multidimensional.

No es posible crear un set multidimensional que almacene listas:

lista_de_alumnos = {
 ["Jorge Campos",34,1.63,"Palo Alto ","044-55-28-43-76-28"],
["Cuauhtémoc Blanco",32,1.68,"Jesús María ","044-55-28-43-76-27"],
["Joel Sánchez Ramos",28,1.92,"Pabellón de Arteaga ","044-55-28-43-76-26"],
["Duilio Davino",38,1.80,"Rincón de Romos ","044-55-28-43-76-25"]
}

No es posible crear un set multidimensional que almacene lists

No es posible crear un set multidimensional que almacene sets:

lista_de_alumnos = {
{1,2,3},
{1,2,3,4},
{1,2,3,4,5},
{1,2,3,4,5,6}
}

No es posible crear un set multidimensional que almacene sets

No es posible crear un set multidimensional que almacene dictionaries:

lista_de_alumnos = {
	  
		{ # creo un dictionary
			"nombre": "Jorge Campos", # un elemento de mi dictionary
			"edad": 34,
			"estatura": 1.63,
			"municipio": "Palo Alto",
			"telefono": "044-55-28-43-76-28",
		}
	,
		{ # creo un dictionary
			"nombre": "Cuauhtemoc Blanco",
			"edad": 32,
			"estatura": 1.68,
			"municipio": "Jesus Maria",
			"telefono": "044-55-28-43-76-27",
		}
	,
		{ # creo un dictionary
			"nombre": "Joel Sanchez Ramos",
			"edad": 28,
			"estatura": 1.92,
			"municipio": "Pabellon de Arteaga",
			"telefono": "044-55-28-43-76-26",
		}
	
}

No es posible crear un set multidimensional que almacene dictionaries

No podemos crear sets multidimensionales, pero podemos convertir una lista en un set y en el proceso eliminar los duplicados.

No podemos crear sets multidimensionales, pero podemos convertir una lista multidimensional en una tuple, luego en un set y en el proceso eliminar los elementos duplicados en una lista multidimensional

Leer los valores de un set

Una vez creado el set, podemos tener acceso a los elementos y sus valores que almacena.

Al crear una lista automáticamente se genera un índice que relaciona los elementos que integran a la lista.

Ese índice asigna el valor 0 al primer elemento de la lista y asigna posteriormente un número consecutivo a cada uno de los elementos hasta abarcar todos los elementos.

De esta manera, con ayuda de ese índice podemos recuperar el valor de cualquier elemento de la lista.

Al crear un set por el contrario no se genera un índice que relaciona los elementos que integran el set.

¿Cómo leer los valores de un set?

Una solución es convertir el set en una lista... para ello utilizamos la función list():

mi_lista = list(mi_set)

Ejemplo:


# creamos un set
mi_set = {
"Jorge Campos",
"Alberto Garcia Aspe",
"Claudio Suarez",
"Cuauhtemoc Blanco",
"Duilio Davino"
}

print(mi_set)

mi_lista = list(mi_set)
#convertimos el set en una lista...

mi_lista[0]
# muestra en pantalla un elemento al azar del set original

mi_lista[3]
# muestra en pantalla un elemento al azar del set original


Para recuperar un elemento de un set una solución es convertir el set en una lista... para ello utilizamos la función list()

Tómese en cuenta que cuando creamos un set el orden de los elementos con el que lo creamos no se respeta.

Ejemplo:


# creamos un set
mi_set = {
"Jorge Campos",
"Alberto Garcia Aspe",
"Claudio Suarez",
"Cuauhtemoc Blanco",
"Duilio Davino"
}

print(mi_set)
# mostramos en pantalla el contenido del set 

Tómese en cuenta que cuando creamos un set  el orden  de los elementos con el que lo creamos no se respeta.

Contar los elementos de un set

Para saber cuantos elementos integran un set, utilizamos la función LEN:

len(nombre_del_set)

Ejemplo:


# creamos un set
mi_set = {
"Jorge Campos",
"Alberto Garcia Aspe",
"Claudio Suarez",
"Cuauhtemoc Blanco",
"Duilio Davino"
}



total_elementos = len(mi_set)
# creamos la variable total_elementos
# almacenamos en ella el resultado de la función len
# len cuenta la cantidad de elemtos en el set

print(total_elementos)
# muestra en pantalla 5...
# el set tiene 5 elementos

Para saber cuantos elementos integran un set, utilizamos la función len(nombre_del_set).

Hacer una iteración en un set

Es posible hacer una iteración en un set con la ayuda de la función de control de flujo FOR.

Ejemplo:

# creamos un set
mi_set = {
"Jorge Campos",
"Alberto Garcia Aspe",
"Claudio Suarez",
"Cuauhtemoc Blanco",
"Duilio Davino"
}




for elemento in mi_set:
#  hacemos una iteración elemento por elemento en nuestro set
# elemento es una variable que almacena el valor del elemento
# for es una función de control de flujo
# for hace la iteración elemento por elemento
# in  permite definir que lista usaremos
#  mi_set es el set donde haremos la iteración
# : inicia nuestra función de control de flujo
	#muy importante, creamos una sangía para el contenido
	# de la función de control de flujo
	print(elemento)
	 # cada elemento lo mostramos en pantalla


Es posible hacer una iteración en un set con la ayuda de la función de control de flujo FOR.

Un dolor de cabeza al programar en python, sobre todo para los que vienen de otros lenguajes de programación, son los espacios, sangrías, tabulaciones y saltos de línea para definir el contenido de las funciones y funciones de control de flujo.

Python no utiliza { } para definir el contenido de las funciones y funciones de control de flujo. Python utiliza sangrías / tabulaciones / espacios y saltos de línea.

Una sangría / tabulación / espacio o salto de línea mal colocados implicaría que nuestro código no haga nada, produzca un error u ofrezca un resultado completamente diferente.

Tómese como referencia el siguiente ejemplo:

lista_de_alumnos = {
"Jorge Campos",
"Alberto García Aspe",
"Claudio Suárez",
"Cuauhtémoc Blanco",
"Duilio Davino",
"Francisco Palencia",
"Germán Villa",
"Jaime Ordiales",
"Jesús Arellano",
"Joel Sánchez Ramos",
"Luis Hernández",
"Pável Pardo",
"Ramón Ramírez",
"Raúl Rodrigo Lara",
}



for elemento in lista_de_alumnos:
print(elemento)

Y su resultado:

Una sangría / tabulación mal colocada implicaría que nuestro código no haga nada, produzca un error u ofrezca un resultado completamente diferente.

¿Qué fué lo que pasó?

¿Por qué marco error?

¿Por qué no hizo la iteración?

Cuál es la diferencia entre este código:

lista_de_alumnos = {
"Jorge Campos",
"Alberto García Aspe",
"Claudio Suárez",
"Cuauhtémoc Blanco",
"Duilio Davino",
"Francisco Palencia",
"Germán Villa",
"Jaime Ordiales",
"Jesús Arellano",
"Joel Sánchez Ramos",
"Luis Hernández",
"Pável Pardo",
"Ramón Ramírez",
"Raúl Rodrigo Lara",
}



for elemento in lista_de_alumnos:
print(elemento)

Y este otro código:

lista_de_alumnos = {
"Jorge Campos",
"Alberto García Aspe",
"Claudio Suárez",
"Cuauhtémoc Blanco",
"Duilio Davino",
"Francisco Palencia",
"Germán Villa",
"Jaime Ordiales",
"Jesús Arellano",
"Joel Sánchez Ramos",
"Luis Hernández",
"Pável Pardo",
"Ramón Ramírez",
"Raúl Rodrigo Lara",
}



for elemento in lista_de_alumnos:
	print(elemento)

La diferencia es la sangría / tabulación / espacio o salto de línea que python utiliza para definir el contenido de las funciones y funciones de control de flujo.

Una sangría / tabulación / espacio o salto de línea mal colocados implicaría que nuestro código no haga nada, produzca un error u ofrezca un resultado completamente diferente.

Buscar un valor en un set

Para buscar un valor en un set, utilizamos el comando IN :

 valor_a_buscar in nombre_del_set

Ejemplo:

mi_set = {
1,
2,
3,
4,
5,
6
}

6 in mi_set
# buscal el valor 6 en el set mi_set
# resultado, true / verdadero
# el 6 está en el set


15 in mi_set
# buscal el valor 15 en el set mi_set
# resultado, false / falso
# el 15 NO ESTÁ en el set


Buscar un valor en un set

Podemos buscar strings / cadenas de caracteres, en nuestro sets:


mi_set = {
"Jorge Campos",
"Alberto García Aspe",
"Claudio Suárez",
"Cuauhtémoc Blanco"
}


"Cuauhtémoc Blanco" in  mi_set
# buscal el valor "Raúl Rodrigo Lara" en el set 
# resultado, true / verdadero
# el valor "Raúl Rodrigo Lara" está en el set


"Raúl Alonso Jiménez" in  mi_set
# buscal el valor "Raúl Alonso Jiménez" en el set 
# resultado, false / falso
# el valor "Raúl Alonso Jiménez" NO ESTÁ  en el set


Podemos buscar strings / cadenas de caracteres, en nuestros sets

Agregar un elemento a un set

Para agregar un valor en un un set utilizamos la función ADD:

 mi_set.add(nuevo_valor)

Ejemplo:

mi_set_de_numeros = {
1,
2,
3,
4,
5,
6}

mi_set_de_numeros.add(7)
# agrega el valor 7 al set

mi_set_de_numeros
#mostrara en pantalla: {1, 2, 3, 4, 5, 6, 7}

Para agregar un valor en un set  utilizamos la función ADD

La misma lógica aplica si queremos agregar un string / cadena de caracteres a nuestro set:

mi_set_de_numeros = {
1,
2,
3,
4,
5,
6}

mi_set_de_numeros.add('America Campeón')
# agrega el valor 'America Campeón' al set

mi_set_de_numeros
#mostrara en pantalla: {1, 2, 3, 4, 5, 6, 7, 'America Campeón'}

Es posible agregar varios valores simultáneamente a nuestro set, para ello usamos la función UPDATE:

 mi_set.update([nuevo_valor_01,  nuevo_valor_02, nuevo_valor_03, nuevo_valor_04, nuevo_valor_05])

Ejemplo:

mi_set_de_numeros = {
1,
2,
3,
4,
5,
6}

mi_set_de_numeros.update([0,7,8,9,10])
# agrega el valor 0 al set
# agrega el valor 7 al set
# agrega el valor 8 al set
# agrega el valor 9 al set
# agrega el valor 10 al set

mi_set_de_numeros
#mostrara en pantalla: 
# {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}


Es posible agregar varios valores simultáneamente a nuestro set, para ello usamos la función UPDATE

Una característica muy importante del set es que no permite la existencia de elementos duplicados, de elementos con el mismo valor. Si intentamos agregar valores duplicados a un set, simplemente no se agregarán

mi_set_de_numeros = {
1,
2,
3,
4,
5,
6}

mi_set_de_numeros.update([6,5,4,3,2])
# intenta agregar el valor 6 al set
# intenta agregar el valor 5 al set
# intenta agregar el valor 4 al set
# intenta agregar el valor 3 al set
# intenta agregar el valor 2 al set

mi_set_de_numeros
#mostrara en pantalla: 
# {1, 2, 3, 4, 5, 6}

Si intentamos agregar valores duplicados a un set, simplemente no se agregarán

Eliminar un elemento de un set

Para eliminar un valor de un set utilizamos la función REMOVE:

 mi_set.remove(valor_a_borrar)

Ejemplo:

mi_set_de_numeros = {
1,
2,
3,
4,
5,
6}

mi_set_de_numeros.remove(1)
# elimina el elemento cuyo valor sea 1

mi_set_de_numeros
#mostrara en pantalla: {2, 3, 4, 5, 6}

Para eliminar un valor en una lista  utilizamos la función REMOVE

Modificar el valor de un elemento en un set

No es posible modificar el valor de un elemento en una set.

La solución posible es eliminar el elemento a "modificar" y crear un nuevo elemento en el set.

Ordenar un set

Por ahora no es posible ordenar un set. Una solución sería convertir nuestro set en una lista y entonces sí ordenarlo. Para convertir nuestro set en un lista usamos el comando LIST():

 mi_lista = list(mi_set)

Copiar un set

Para copiar un set necesitamos importar el módulo / librería COPY y luego utilizamos la función DEEPCOPY:

 
import copy
#importar el módulo / librería COPY

mi_set_copiado = copy.deepcopy(mi_set)

Ejemplo:

import copy

mi_set_de_numeros = {
15,
2,
34,
14,
-5,
75}

mi_set_copiado = copy.deepcopy(mi_set_de_numeros)
# copiamos el set en un nuevo set


mi_set_copiado
# recuperarmos el valor del primer elemento del set copiado
# muestra {2, 34, 75, 14, 15, -5}

mi_set_de_numeros
# recuperarmos el valor del primer elemento del set  original
# muestra {2, 34, 75, 14, 15, -5}

Para copiar  una lista  necesitamos importar el módulo / librería COPY y luego utilizamos la función DEEPCOPY

Este ejemplo es parte de un tutorial más completo que puede consultarse:

Sitios de interés

Sitio oficial de Python


Comenta y opina este texto     Lee mi libro de visitas
© 1997-2019 Alain García Gómez
albegago@hotmail.com
Twitter: @feesgo
El vínculo a este documento es:

Compartir en facebook Compartir en twitter Compartir en whatsapp Rss

Puedes apoyar a este sitio invitándome a comer...

Este sitio utiliza cookies propias y de terceros para mejorar sus servicios. Si continua navegando, entendemos que acepta su uso. Política de Privacidad