Untitled

 avatar
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...