9 de febrero de 2019
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!
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 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 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 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
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
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
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
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
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:
¿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.
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
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
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}
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}
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}
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}
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.
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)
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}
Este ejemplo es parte de un tutorial más completo que puede consultarse:
Comenta y opina este texto Lee mi libro de visitas
© 1997-2024 Alain García
albegago@hotmail.com
Twitter: @feesgo
YouTube
El vínculo a este documento es:
http://www.alaingarcia.net/weird/python_05_sets.php
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