conj1 = set(range(10)) conj2 = set(range(6, 15)) print(conj1) print(conj2) # Union: los elementos de los dos conjuntos union = conj1.union(conj2) # utilizando la función union print(union) unionOp = conj1 | conj2 # utilizando el operador union (|) print(unionOp) # intersección: Los elementos compartidos por los dos conjuntos interseccion = conj1.intersection(conj2) # utilizando la función print(interseccion) interseccion2 = conj1 & conj2 # utiilizando operador print(interseccion2) frutas = {"naranja", "pera", "manzana", "granada"} colores = {"naranja", "violeta", "rojo"} print(frutas & colores) # diferencia los elementos de un conjunto menos los que están en el otro diferencia=conj1.difference(conj2) # función print(diferencia) diferencia2=conj1-conj2 # operador print(diferencia2) # diferencia simétrica los que no son comunes diff_simetrica=conj1.symmetric_difference(conj2) print(diff_simetrica) diff_simetrica2=conj1^conj2 print(diff_simetrica2)
Categoría: Python
Ejemplos conjuntos
conjunto = {1, 2, 3, 4} # llaves y después valores for el in conjunto: print(el) # en un conjunto los valores son únicos, no podemos tener valores repetidos conjunto = {1, 2, 1, 2, 1, 2} for el in conjunto: print(el) conjunto = {1, 0, False, True, ""} # a todos los efectos False=0 y True es cualquier número print(conjunto) # {0, 1, ''} if 2 in conjunto: print("Está el 2") else: print("No está el 2") conjunto.add(8) conjunto.add(7) conjunto.add(8) print(conjunto) # {0, 1, '', 7, 8} conjunto.update([1, 2, 3, 4, 5, 6]) # Añado cualquier iterable (tuplas, listas, otros conjuntos,...) print(conjunto) # {0, 1, '', 2, 3, 4, 5, 7, 8, 6} lista = [1, 2, 2, 1, 4, 5, 2, 2, 2, 1, 2, 4] # Saber los elementos diferentes listaNoRepetida = set(lista) # Creando un conjunto a partir de una lista print(listaNoRepetida) listaNo = list(listaNoRepetida) # Convertir entre iterables usando set, list, tuple print(listaNo) alumno2 = {"nombre": "Eva", "nota": 8, "Apellido": "Pi", "email": "eva@eva.com" } alumnoSet = set(alumno2) print(alumnoSet) dicc = dict(a=4, b=5) dicc2 = dict([("q", 1), ("s", 1)]) print(dicc2) conjunto.remove(1) print(conjunto) conjunto.remove(10) # Error porque no existe print(conjunto) conjunto.discard(10) # No da error, no hace nada print(conjunto)
Ejercicio completo
# Obtener las frecuencias de letras en castellano # Saber sacar las frecuencias de una cadena de texto # Coger textos grandes (un fichero) y analizarlo # A partir de ese análisis ordenar las letras por frecuencia # En primer lugar una función frecuenciaLetras(cadena) a la que le pasamos # una cadena y nos devuelve un diccionario con la clave cada una de las letras # y el valor la cantidad d veces que aparece en esa cadena # en python tenemos la función isalpha que nos devuelve true si una cadena # solo tiene las letras de la a a la z (para no contar espacios, signos de puntuación...) def frecuenciaLetras(cadena): frecuencia = {} # Hago lo mismo que en el ejercicio anterior de palabras for letra in cadena.lower(): # TODO: Mirar el tema acentos if letra.isalpha(): if letra in frecuencia: frecuencia[letra] += 1 else: frecuencia[letra] = 1 return frecuencia print(frecuenciaLetras("aaabbbccd")) # {a:3,b:3,c:2,d:1 print(frecuenciaLetras("aaa . bbb c 12cd")) # {a:3,b:3,c:2,d:1 # por otro lado vamos a crear una función frecuenciaFile(archivo) que nos lee un archivo # de texto, pasa el contenido a la función frecuenciaLetras y nos devuelve el resultado def frecuenciaFile(archivo): # Abrir un archivo en modo lectura archivo = open(archivo, "r", encoding="utf-8") # Leer el contenido del archivo contenido = archivo.read() # Cerrar el archivo archivo.close() estadistica = frecuenciaLetras(contenido) return estadistica frecuencias = frecuenciaFile("diccionario.txt") print(frecuencias) # {a:12,b:7,c:5,j:3} # por último vamos a tener una función ordenLetras(diccionario) a la que le pasamos # un diccionario con la frecuencia de las letras y nos devuelve una lista de letras # ordenadas de mayor frecuencia a menor frecuencia def ordenLetras(diccionario): lista = sorted(diccionario, key=diccionario.get, reverse=True) return lista def ordenLetras2(diccionario): lista = sorted(diccionario.values(), reverse=True) letras=[] for frec in lista: posicion=list(diccionario.values()).index(frec) letra=list(diccionario.keys())[posicion] letras.append(letra) return letras print(ordenLetras(frecuencias)) print(ordenLetras2(frecuencias)) print(frecuencias["a"]) print(frecuencias.get("a"))
Más ejemplos diccionarios anidados
# una función a la que le pasamos una cadena y nos devuelve una estadística de cuantas # veces aparece una palabra def estadisticaPalabras(cadena): palabras = cadena.lower().split() estadistica = {} for palabra in palabras: if palabra in estadistica: estadistica[palabra] += 1 else: estadistica[palabra] = 1 return estadistica print(estadisticaPalabras("la vaca en la plaza come la hierba en compañía")) productos = [ {"nombre": "lechuga", "tipo": "Vegetal", "precio": 2}, {"nombre": "zanahorsia", "tipo": "Vegetal", "precio": 3}, {"nombre": "queso", "tipo": "Lácteo", "precio": 5}, {"nombre": "yogur", "tipo": "Lácteo", "precio": 3}, {"nombre": "chorizo", "tipo": "Embutido", "precio": 6}, ] def categorizar(lista): categorias={} for producto in lista: if producto["tipo"] not in categorias: categorias[producto["tipo"]]=[] categorias[producto["tipo"]].append(producto["precio"]) return categorias print(categorizar(productos))
Diccionarios anidados ejemplos
# Con las estructuras de datos es muy normal tener elementos anidados alumnos = [{ "nombre": "Ana", "email": "ana@ana.com", "notas": [{"asignatura": "Python", "nota": 6}, {"asignatura": "Java", "nota": 8}, {"asignatura": "C#", "nota": 5}] }, { "nombre": "Eva", "email": "eva@eva.com", "notas": [{"asignatura": "Python", "nota": 8}, {"asignatura": "Java", "nota": 1}, {"asignatura": "C#", "nota": 5}] }, { "nombre": "Pep", "email": "pep@pep.com", "notas": [{"asignatura": "Python", "nota": 4}, {"asignatura": "Java", "nota": 5}, {"asignatura": "C#", "nota": 5}] }] # En primer lugar estoy recorriendo la lista de alumnos for alumno in alumnos: print("Alumno: ", alumno["nombre"]) total = 0 # Recorro la lista que está en la propiedad 'notas' for nota in alumno["notas"]: total += nota["nota"] # recorro el diccionario de cada una de las notas for clave, valor in nota.items(): print(clave, valor) print("Media", total / len(alumno["notas"])) print("-" * 20) # En primer lugar estoy recorriendo la lista de alumnos for alumno in alumnos: print("Alumno: ", alumno["nombre"]) total = 0 # Recorro la lista que está en la propiedad 'notas' for nota in alumno["notas"]: total += nota["nota"] # recorro el diccionario de cada una de las notas for clave, valor in nota.items(): print(clave, valor) print("Media", total / len(alumno["notas"])) print("-" * 20) # SI quisiera saber la media de notas de cada asignatura ¿Cómo lo haría? # Creo un diccionario cuya clave sea la asignatura y el valor las notas # Primero creo un diccionario vacío asignaturas={} # Recorro los alumnos for alumno in alumnos: # Recorro las asignaturas de los alumnos for asignatura in alumno["notas"]: nombre=asignatura["asignatura"] # capturo el nombre nota=asignatura["nota"] # capturo la nota print(nombre,nota) # Imprimo para probar # Compruebo si es la primera vez que tengo esta asignatura # Si es la primera vez no está en el diccionario if nombre not in asignaturas: asignaturas[nombre]=[] # entonces me creo una lista vacía # Añado la nota a esa lista asignaturas[nombre].append(nota) # Tengo un diccionario que he creado yo con la clave el nombre de la asignatura # Los valores las notas de cada asignatura print(asignaturas) # Teniendo ese diccionario sacar la media es trivial for nombre,notas in asignaturas.items(): print(nombre,sum(notas)/len(notas))
Diccionarios
# Un diccionario es una estructura de datos que se basa en # un par clave, valor # Es decir, tenemos una serie de elementos identificados por una clave # y para cada clave tenemos un valor # lista de alumnos y una lista de notas alumnos = ["Ana", "Eva", "Pep1"] notas = [6, 7, 8] # para definir un diccionario utilizo las llaves {} # conjunto de pares 'clave' y 'valor' alumno1 = { "nombre": "Ana", # clave es 'nombre' y el valor 'Ana' "nota": 6 # clave es 'nota' y el valor 6 } print(alumno1) # como accedo yo a los valores inviduales. mediante la clave print(alumno1["nombre"]) print(alumno1["nota"]) print(alumno1.get("nota")) print(alumno1.get("notas", 0)) # si la clave no existe podemos tener un valor por defecto alumno1["email"] = "ana@ana.com" print(alumno1) alumno1["nota"] = 9 # cambio el valor de esa clave print(alumno1) alumno2 = {"nombre": "Eva", "nota": 8, "nombre": "Pep" # Las claves no pueden estar repetidas. En este caso se sustituye el valor anterior } print(alumno2) # eliminar elementos del diccionario con 'pop' alumno1.pop("email") # elimina la clave 'email' print(alumno1) alumno1.popitem() # elimina la última clave print(alumno1) # En python tenemos 'del' para eliminar cualquier variable del alumno1["nombre"] # nos elimina la clave 'nombre' print(alumno1) del alumno1 # nos dejaría si esta variable alumno2.clear() # vaciar un diccionario alumno2 = {"nombre": "Eva", "nota": 8, "Apellido": "Pi", "email": "eva@eva.com" } # recorrer un diccionario for elemento in alumno2: print(elemento) # recorre las claves del diccionario # Con esto recorro tanto las claves como los valores for elemento in alumno2: print(elemento, alumno2[elemento],alumno2.get(elemento)) # recorre las claves del diccionario # Con esto recorro solo los valores for elemento in alumno2.values(): print(elemento) # recorre solo los valores print(alumno2.keys()) # recorro los items que son tuplas y la desempaqueto y la asigno a una clave y un valor for clave, valor in alumno2.items(): print(clave, valor) print(alumno2.items()) # Copiar un diccionario igual que una lista, con copy alumno3 = alumno2.copy() alumno3["nombre"] = "Juan" print(alumno3) # Comprobar que la clave exista if "nombre" in alumno3: print(alumno3["nombre"]) # Comprobar que el valor existe if "Juan" in alumno3.values(): print("Juan es un valor del diccionario")
Más ejercicios listas
# funcion pivote de una lista de números nos divide la lista en 2 partes # primero los menores del número que pasemos y por otra los mayores # pivote([4,1,9,5,3,7],6)->([4,1,5,3],[9,7]) def pivote(lista, elemento): izq = [] der = [] for i in lista: if i < elemento: izq.append(i) elif i > elemento: der.append(i) return (izq, der) print(pivote([4, 1, 9, 6, 5, 3, 7], 6)) izq,der=pivote([4, 1, 9, 6, 5, 3, 7], 6) print(izq,der) # funcion ordenarLista a la que le pasamos una lista de palabras y nos la ordena por la longitud de las cadenas # ordenarLista(["bbb","a","ddddd","cccc"])->["a","bbb","cccc","ddddd"] def ordenarLista(lista): lista2=lista.copy() lista2.sort(key=len) return lista2 # funcion aplicarFuncion a la que le pasamos una lista de numeros y una función y nos devuelve la lista aplicando la función a cada uno de los elementos def doble(numero): return numero*2 def aplicarFuncion(lista,funcion): lista2 = [funcion(x) for x in lista] return lista2 print(aplicarFuncion([1,2,3,4],doble))
Ejercicios listas
# escribir una función recortarPalabras a la que le pasamos una lista de palabras # y una longitud y nos devuelve una lista con las palabras de esa lonitud o superior # recortarPalabras(["aa","bbb","cccc","dddddd"],4)->["cccc","dddddd"] # con comprensión de listas es muy fácil # escribir una función a la que le pasamos una lista de números y nos devuelve la mitad # de los números pares, los impares los ignora # mitadPares([1,2,5,8,10])->[1,4,5] # escribir una función a la que le pasamos dos listas y nos devuelve true si tienen # algún elemento en común y false en caso contrario # elementoComun([1,2,3],[4,5,6])->false # elementoComun([1,2,3],[4,5,6,3])->true # (es más fácil de lo que parece) # escribir una función a la que le pasamos una lista de números y nos devuelve una tupla # con la suma y la media de los números # estadistica([1,2,3])->(6,2)
Desempaquetar
tupla = (1, 2, 3) a, b, c = tupla # desempaquetando la tupla. A las variables se les asignan automáticamente los # valores de la tupla print(a, b, c) def extremos(*args): min = args[0] max = args[0] for n in args: if n < min: min = n if n > max: max = n return (min, max) # tupla = extremos(1, 5, 3, 7, 9, 0, -2) a, b = extremos(1, 5, 3, 7, 9, 0, -2) print(a, b) a, _, b = tupla # con el guión bajo ignoro elementos print(a, b) tupla=(1, 5, 3, 7, 9, 0, -2) a,*b,c=tupla # con el asterisco capturo un numero indeterminado de elementos print(a,b,c) a,*_,c=tupla # con el asterisco y guion bajo ignoro un numero indeterminado de elementos print(a,c)
Tuplas
# las tuplas son como las listas pero inmutables # se definen con paréntesis tupla = (1, 2, 3, 4, 5,6,7,8,9,10) print(tupla[0]) print(len(tupla)) for t in tupla: print(t) for i in range(len(tupla)): print (i,tupla[i]) # El mismo slicing que cadenas y listas print(tupla[2:4]) print(tupla[2:]) print(tupla[:4]) print(tupla[2:-2]) print(tupla[-7:-2]) print(tupla[0::2]) # El operador in que lo teníamos en las cadenas también lo tenemos en tuplas y listas if 8 in tupla: print("El 8 está en la tupla") # sumar tuplas otra=(1,2,3) suma=tupla+otra print(tupla,otra,suma) lista=list(suma) print(lista)