Untitled
unknown
python
3 years ago
2.9 kB
3
Indexable
import numpy as np import random import pandas as pd def generar_nombre_aleatorio(lista_nombres: np.array, lista_apellidos: np.array, numero_nombres: int): # Seleccionamos un nombre y un apellido aleatorios de las listas nombres: list[str] = [np.random.choice(lista_nombres) for i in range(numero_nombres)] apellidos: list[str] = [np.random.choice(lista_apellidos) for i in range(numero_nombres)] nombres: np.array = np.array(nombres) apellidos: np.array = np.arry(apellidos) # Devolvemos el nombre y el apellido concatenados return nombres, apellidos def generar_dni_aleatorio(numero_dnis: int): # Generamos un número aleatorio entre 100000000 y 999999999 para cada DNI numeros = np.random.randint(100000000, 999999999, size=numero_dnis) # Calculamos la letra del DNI a partir del número generado letras = "TRWAGMYFPDXBNJZSQVHLCKE" restos = numeros % 23 letra = [letras[valor] for valor in restos] # Creamos una lista de DNI como cadenas de 8 dígitos y una letra dnis = [f"{numero}{letra}" for numero, letra in zip(numeros.astype(str), letra)] # Devolvemos la lista de DNI return dnis def sumar_listas(lista1, lista2): # Sumamos cada par de elementos usando la función map() suma = list(map(lambda x, y: x + y, lista1, lista2)) # Devolvemos la suma return suma def generar_lista_normal(n): # Generamos una lista de n números aleatorios que sigan una distribución normal estándar lista = [random.normalvariate(0, 1) for _ in range(n)] # Calculamos la suma de la lista suma = sum(lista) # Dividimos cada número de la lista por la suma para obtener una lista cuyos elementos sumen 1 lista_normalizada = [x / suma for x in lista] # Comprobamos que la lista esté normalizada while sum(lista_normalizada) != 1: # Si no lo está, volvemos a generar la lista y a normalizarla lista = [random.normalvariate(0, 1) for _ in range(n)] suma = sum(lista) lista_normalizada = [x / suma for x in lista] # Devolvemos la lista normalizada return lista_normalizada def generar_lista_probabilidades(cadenas: list, probabilidades: list, tamaño: int) -> list: # Comprobamos que las listas tengan la misma longitud if len(cadenas) != len(probabilidades): raise ValueError("Las listas de cadenas y probabilidades deben tener la misma longitud") # Comprobamos que las probabilidades sumen 1 if sum(probabilidades) != 1: raise ValueError("Las probabilidades deben sumar 1") # Generamos la lista resultante resultado = [] for cadena, probabilidad in zip(cadenas, probabilidades): resultado += [cadena] * int(probabilidad * tamaño) # Mezclamos la lista resultante random.shuffle(resultado) return resultado
Editor is loading...