Domina dos estructuras esenciales de Python para escribir código claro y efectivo: tuplas y conjuntos. Aprenderás qué son, cómo inicializarlas sin confusión y cuándo usarlas, incluyendo operaciones clave de teoría de conjuntos como intersección, unión y diferencia. Practica sin miedo al error: lo importante es desarrollar resolución de problemas, no frustrarte y seguir adelante.
¿Qué son las tuplas en Python y cuándo usarlas?
Las tuples son como listas, pero inmutables: no cambian después de crearse. A diferencia de los strings, pueden guardar muchos tipos de valores, no solo caracteres. Se expresan como una serie de valores separados por coma y, para legibilidad, suelen llevar paréntesis.
Estructura de datos inmutable que agrupa valores heterogéneos.
Útiles para retornar múltiples valores de una función.
Se inicializan con paréntesis o con la notación funcional usando la built-in functiontuple.
Elegir la herramienta correcta evita el “Swiss Army Knife” en código: cada estructura sirve a un propósito.
# tupla literal con paréntesispunto =(3,5)# tupla creada con notación funcionaltupla_numeros =tuple([1,2,3])
¿Cómo devolver múltiples valores con una tupla?
Cuando una función necesita regresar más de un valor (por ejemplo, un punto en un plano cartesiano), una tupla es ideal.
defobtener_punto(): x =3 y =5return(x, y)# dos valores empaquetados en una tuplapx, py = obtener_punto()
¿Qué son los conjuntos y cómo se inicializan sin confusión?
Los sets vienen de la set theory y en Python representan colecciones sin elementos duplicados. A diferencia de las tuplas, los conjuntos son mutables: puedes agregar o eliminar elementos. Se parecen a las listas porque agrupan varios valores, pero con reglas distintas.
Colección sin duplicados y mutable.
Dos notaciones: literal con llaves y funcional con set.
Recomendación: usar la notación funcional para evitar confusiones con diccionarios, que también usan llaves.
# notación literal con llavesconjunto_a ={1,2,3}# notación funcional preferidaconjunto_b =set([3,4,5])
¿Qué notación elegir: literal o funcional?
La forma literal con llaves es breve, pero puede generar confusión con diccionarios. Por claridad, es preferible set(...) cuando declares conjuntos, especialmente en código educativo o colaborativo.
¿Cómo interpretar intersección, unión y diferencia con diagramas de Venn?
Imagina dos conjuntos válidos (sin repetidos): A = {1, 2, 3} y B = {3, 4, 5}. Con un diagrama de Venn se visualiza qué comparte cada uno y qué conserva por separado. Estas operaciones son la base para razonar con conjuntos en código.
Intersección: elementos comunes. Resultado: {3}.
Unión: todos los elementos de ambos conjuntos sin repetir. Resultado: {1, 2, 3, 4, 5}.
Diferencia A − B: lo que está en A y no en B. Resultado: {1, 2}.
Diferencia B − A: lo que está en B y no en A. Resultado: {4, 5}.
Estas ideas te preparan para implementarlas en Python y entender por qué los conjuntos son tan prácticos cuando necesitas operaciones matemáticas limpias y sin duplicados.
¿Te gustaría ver más ejemplos prácticos o proponer un reto con tuplas y conjuntos? Deja tus dudas y comenta qué caso quieres resolver a continuación.
Para los que quieren entender más a fondo las diferencias entre listas y duplas:
listas vs duplas
tuplas*
Tienes razón Eduardo, una dupla sería como una 2-tupla jeje
"""
------TUPLAS------Lastuplas(tuples) son similares a las listas.La unica diferencia es que las tuplas son inmutables.La diferencia con los strings es que pueden recibir muchos tipos valores.Son una serie de valores separados por comas, casi siempre se le agregan
paréntesis para que sea mucho más legible.tup=1,2,3tup =(1,2,3)-->Esta opción es la más se utiliza
Para poderla inicializar utilizamos la función 'tuple'.Un uso muy común es utilizarlas para regresar más de
un valor en una función.return(students,teachers)------CONJUNTOS------Losconjuntos(sets) son una colección sin orden que no
permite elementos duplicados.A diferencia de los tuples podemos
agregar y eliminar, son mutables.Los sets se inicializan con la función 'set'.Para añadir elementos utilizamos el método 'add' y para eliminarlos
utilizamos el método 'remove'"""
## LISTA--> ages =[12,18,24,34,50]## TUPLA--> ages =(12,18,24,34,50)## CONJUNTOS--> ages ={12,18,24,34,50}"""Con las tuplas que pueden utilizar casi todas las(las mismas)funciones y métodos que funcionan con las listas"""
##------TUPLAS------a =(1,2,2,3)b =(3,4,5)c = b+a
print(c)print(a.count(2)) ## Nos dice cuantas veces aparece el numero 2 en la tupla
print(b.index(4)) ## NOs dice en que posición aparece por primera el numero 4 en la tupla
##Esto no lo podemos hacer porque son inmutables, al contrario que las listas, que son mutables
##a[1]=10##c[2]=22##------CONJUNTOS------# Creando un conjunto en python
print('-'*30)A={1,2,3}print(A)# Creando un conjunto a partir de una lista
print('-'*30)lista =["bananas","manzanas","naranjas","limones"]B=set(lista)print(B)# Los conjuntos eliminan los elementos duplicados
print('-'*30)lista =["bananas","manzanas","naranjas","limones","bananas","bananas","limones","naranjas"]B=set(lista)print(B)# Creando el conjunto vacío
print('-'*30)C=set()print(C)# Cardinalidad de un conjunto con len().print('-'*30)print("La cardinalidad del conjunto A = {0} es {1}".format(A,len(A)))
# comprobando membresía
print('-'*30)print(2inA)print(0inA)# Igualdad entre conjuntos.El orden de los elementos no importa.print('-'*30)A={1,2,3,4}B={4,2,3,1}print(A==B)# Subconjunto.No hay distincion entre subconjunto y propio
# para el conjunto por defecto de python.print('-'*30)A={1,2,3}B={1,2,4,3,5}"""issubset() busca si los valores de A están en B, sin importar el orden"""print(A.issubset(B))# Union de conjuntos.Omite los valores repetidos
print('-'*30)A={1,2,3,4,5}B={4,5,6,7,8,9,10}print(A.union(B))# Intersección de conjuntos, es decir, los valores que se repiten
print('-'*30)print(A.intersection(B))# Diferencia entre conjuntos
print('-'*30)print(A.difference(B))print(B.difference(A))print(A-B)print(B-A)##------Utilizando sympy -------# UtilizandoFiniteSet de sympy
"""Para que el import no de error, abrir el power shell como admin
en la carpeta donde este el archivo(en mi caso, que utilizo el
sublime text 3) o si ejecutais desde el interprete por consola, en ambos
casos teneis que poner pip install sympy"""
print('-'*30)from sympy importFiniteSetC=FiniteSet(1,2,3)print(C)# Generando el conjunto potencia.Esto no se puede
# hacer utilizando el conjunto por defecto de python.print('-'*30)print(C.powerset())# Cardinalidadprint('-'*30)print("La cardinalidad del conjunto potencia del conjunto C = {0} es {1}".format(C,len(C.powerset())))# Igualdadprint('-'*30)A=FiniteSet(1,2,3)B=FiniteSet(1,3,2)print(A==B)A=FiniteSet(1,2,3)B=FiniteSet(1,3,4)print(A==B)# Subconjunto y subconjunto propio
print('-'*30)A=FiniteSet(1,2,3)B=FiniteSet(1,2,3,4,5)print(A.is_subset(B))# A==B.El test de subconjunto propio da falso
print('-'*30)B=FiniteSet(2,1,3)print(A.is_proper_subset(B))# Union de dos conjuntos
print('-'*30)A=FiniteSet(1,2,3)B=FiniteSet(2,4,6)print(A.union(B))# Interseccion de dos conjuntos
print('-'*30)A=FiniteSet(1,2)B=FiniteSet(2,3)print(A.intersect(B))# Diferencia entre conjuntos
print('-'*30)print(A-B)# Calculando el producto cartesiano.Con el conjunto por
# defecto de python no podemos hacer esto con el operador *print('-'*30)A=FiniteSet(1,2)B=FiniteSet(3,4)P=A*Bprint(P)for elem inP:print(elem)# Elevar a la n potencia un conjunto.Calcula el n
# producto cartesiano del mismo conjunto.print('-'*30)A=FiniteSet(1,2,3,4)P2=A**2print(P2)P3=A**3print(P3)for elem inP3:print(elem)# Dibujanto el diagrama de venn de 2 conjuntos
"""Para que el import no de error, abrir el power shell como admin
en la carpeta donde este el archivo(en mi caso, que utilizo el
sublime text 3) o si ejecutais desde el interprete por consola, en ambos
casos teneis que poner pip install 'matplotlib'y ' pip install matplotlib_venn'"""
print('-'*30)from matplotlib_venn import venn2, venn2_circles
import matplotlib.pyplotas plt
print(dir(plt))A=FiniteSet(1,3,5,7,9,11,13,15,17,19)B=FiniteSet(2,3,5,7,11,13,17,19,8)plt.figure(figsize=(10,8))v =venn2(subsets=[A,B], set_labels=('A','B'))v.get_label_by_id('10').set_text(A-B)v.get_label_by_id('11').set_text(A.intersection(B))v.get_label_by_id('01').set_text(B-A)c =venn2_circles(subsets=[A,B], linestyle='dashed')c[0].set_ls('solid')plt.show()
Muchas gracias
Gracias por el resumen
Los mejores trabajos son aquellos que utilizan la herramienta correcta para el trabajo correcto
❤️🦄
Estos conceptos de conjuntos en Python los son buenos para practicar con clases de Matemáticas Discretas
A mí me parece que también se va construyendo una especie de relación entre Python con las bases de datos relacionales que me está gustando.
Podemos pasar de listas a tuplas asi
tupla =tuple(lista)
y de tupla a lista asi
lista =list(tupla)
Compa David. Que bien explicaste listas, diccionarios y tuplas. Ahora sí estructuraste bien el desarrollo de estos temas. No se nota improvisado como el curso anterior que te aventaste XD
Excelente.
Casi muero con el reto.
jajaja yo también.
estuvo rebueno-dificil y me emocione cuando lo logre, genial esa sensacion!
Los sets nacen de la teoría de conjuntos. No permiten elementos duplicados.
la mayor diferencia de una tupla con una lista es que la lista es inmutable
ventajas de una tupla frente a una lista, la tupla puede regresar varios valores
los conjuntos se parecen a la teoría de conjuntos donde se pueden añadir varios elementos al conjunto pero no existe elementos duplicados su palabra es set
POV: En la prepa pensaste que jámas usarías conjuntos en la vida real 🤡
me gusta mucho ver la teoría aplicada
Ayuda mucho al aprendizaje
Los buenos programas, son los que utilizan la herramienta correcta para el trabajo correcto.
Sets
.
!img
.
Ejercita tus conocimientos con simples ejercicios de SETS
.
1.- Crea un SET
primos =set()# primos ={} un set vacion
# Podemos agregar valores a partir de una lista o una tupla conviertiendo esas estructuras a sets con el método set()mi_lista =[3,5,7,9,11,13]primos =set(mi_lista)# primos ={3,5,7,9,11,13}>>> primos ={3,5,7,9,11,13}>>>type(primos)<class'set'># Puedes agregar valores con add().También agregarlos a partir de otra estructura con .update()primos.add(21)# {3,5,7,9,11,13}# Tambien podrás eliminar valores del set con .discard() y .remove().La diferencia es que si el elemento no se encuentra en el ser .remove reportará un error mientras que .discard no lo hará.primos.discard(3)# {5,7,9,11,13}platzi =set('NuncaParesdeAprender')print(platzi)# {'P','n','N','p','A','c','s','e','u','d','a','r'}# Eliminando el contenido de un set con .clear()platzi.clear()# platzi ={}
.
Sets para teoría de conjuntos
# Los siguientes símbolos se utilizan para operar conjuntos con sets:se1 =[1,2,3]set2 =[3,4,5]Unión:(|)......................................sets= set1 | set2
Intersección:(&).............................sets= set1 & set2
Diferencia:(-)..................................sets= set1 - set2
Diferencia simétrica:(^)..................sets = set1 ^ set2
Comparando dos Sets:(==)............sets = set1 == set2
Comprobando membresía:(in).......sets= set1 in set2
En la parte de 'Set para teoría de conjuntos' se han seteado listas y no sets, deben están entre {} y no entre []
Tuples
======
A pesar de parecerse a las listas, las tuplas son más livianas y tienen menos métodos disponibles, esto sucede debido a que las tuplas son inmutables, es decir, no se pueden modificar, a diferencia de las listas. Un punto a favor de las tuplas es que al ser más livianas se pueden trabajar mejor con grandes extensiones de datos.
Si se desea crear una tupla que sólo contenga un elemento, esto se puede hacer con la siguiente sintaxis
prueba = a,type(prueba)<class'tuple'>
Teoría de conjuntos
======
La teoría de conjuntos es una parte de la matemática que estudia como se relacionan un tipo especial de objetos llamados conjuntos, esta se suele hacer de forma gráfica a través de los diagramas de Venn.
La teoría de conjuntos posee además una álgebra de conjuntos que tiene las siguientes operaciones básicas:
Union: que enlaza dos conjuntos y se representa (A ∪ B)
Intersección: en esta se ubican todos los elementos que esten en ambos objetos (A ∩ B)
Diferencia: (A \ B) nos muestra los elementos que estan en A y no pertenecen a B, (B \ A) Tiene todos los elementos de B que no pertenercen a A.
Sets
No son ordenados, es decir, no importa el orden en que agregues datos a el set, estos pueden aparecer en diferente orden. Por otro lado si se agregan dos veces el mismo dato en un set, este agregara el dato la primera vez y la segunda lo ignorara.
Por ejemplo si yo creo el siguiente set en mi computadora
examp =set({1,9,'casa','hoy'})#Luego imprimp examp me da el siguiente valor
examp
{'casa',1,9,'hoy'}
En caso de intentarlo en tu computadora con los exactos mismos números y strings, es muy probable que cuando imprimas examp te de un orden distinto.
Los sets tienen los siguientes métodos para las operaciones de conjuntos
para la unión se usa el método union.
para intersección posee intersection.
para diferencia se usa difference.
además posee distintos métodos para otras operaciones como symmetric_difference, issubset, copy.
Para borrar todo un set se utiliza clear.
genial
Ahí va mi solución:
import sys
clientes =[{'nombre':'Pablo','empresa':'Google','email':'pablo@google.com','posicion':'Software Engineer'},{'nombre':'Ricardo','empresa':'Facebook','email':'ricardo@facebook.com','posicion':'Data Engineer'}]def crear_cliente( cliente ): global clientes
if cliente not inclientes: clientes.append( cliente )else:print('El cliente ya se encuentra en la lista.')def listar_cliente(): global clientes
for indice, cliente inenumerate( clientes ):_mostrar_cliente( indice )def actualizar_cliente(id_cliente, cliente_nuevo): global clientes
clientes[id_cliente]= cliente_nuevo
def eliminar_cliente( id_cliente ): global clientes
del clientes[ id_cliente ]def buscar_cliente(): global clientes
nombre_cliente =_obtener_campo_cliente('nombre')for cliente inclientes:if cliente['nombre']== nombre_cliente:returnTrueelse:returnFalsedef _buscar_cliente_x_nombre(): global clientes
nombre_cliente =_obtener_campo_cliente('nombre')for indice, valor inenumerate( clientes ):if valor['nombre']== nombre_cliente:return indice
else:return-1def _mostrar_cliente( indice ): global clientes
print('{uid} | {nombre} | {empresa} | {email} | {posicion}'.format( uid=indice, nombre=clientes[indice]['nombre'], empresa=clientes[indice]['empresa'], email=clientes[indice]['email'], posicion=clientes[indice]['posicion']))def _obtener_campo_cliente( nombre_campo ): campo =Nonewhile not campo: campo =input('¿Cuál es el {} del cliente?: '.format(nombre_campo))return campo
def _obtener_cliente(): cliente ={'nombre':_obtener_campo_cliente('nombre'),'empresa':_obtener_campo_cliente('empresa'),'email':_obtener_campo_cliente('email'),'posicion':_obtener_campo_cliente('posicion')}return cliente
def _imprimir_bienvenida():print('BIENVENIDO A PLATZI VENTAS')print('*'*50)print('¿Qué te gustaría realizar?: ')print('[C]rear Cliente')print('[L]istar Cliente')print('[A]ctualizar Cliente')print('[E]liminar Cliente')print('[B]uscar Cliente')print('[S]alir')if __name__ =="__main__":whileTrue:_imprimir_bienvenida() comando =input() comando = comando.upper()if comando =='C': cliente =_obtener_cliente()crear_cliente( cliente )listar_cliente() elif comando =='L':listar_cliente() elif comando =='A': id_cliente =_buscar_cliente_x_nombre()if id_cliente !=-1:_mostrar_cliente( id_cliente ) cliente_nuevo =_obtener_cliente()actualizar_cliente( id_cliente, cliente_nuevo )listar_cliente()else:print('El cliente no se encuentra en la lista de clientes.') elif comando =='E': id_cliente =_buscar_cliente_x_nombre()if id_cliente !=-1:eliminar_cliente( id_cliente )listar_cliente()else:print('El cliente no se encuentra en la lista de clientes.') elif comando =='B': encontrado =buscar_cliente()ifencontrado:print('El cliente se encuentra en la lista.')else:print('El cliente no se encuentra en la lista.')listar_cliente() elif comando =='S':breakelse:print('Comando inválido.')
Mil disculpas que está todo en español, tan solo que aprovecho y genero material para mis clases.
Conjuntos o Sets
Matemáticas discretas!!!
Las tuplas se comportan similar a las listas, pero la diferencia es que son inmutables.
Los mejores trabajos son aquellos que utilizan la herramienta correcta para el trabajo correcto
alta frase
En otro curso se manejaron los conceptos muy de la mano.