python - 我需要一个 Python 函数,当给定所需的字符概率时,它将输出 4 个不同字符的随机字符串

标签 python random

例如, 该函数可能类似于 def RandABCD(n, .25, .34, .25, .25):

其中n是要生成的字符串的长度,后面的数字是期望的A、B、C、D的概率。

我想这很简单,但是我在创建工作程序时遇到了问题。任何帮助将不胜感激。

最佳答案

下面是选择单个加权值的代码。你应该可以从这里拿走它。它使用 bisectrandom完成工作。

from bisect import bisect
from random import random

def WeightedABCD(*weights):
  chars = 'ABCD'
  breakpoints = [sum(weights[:x+1]) for x in range(4)]
  return chars[bisect(breakpoints, random())]

这样调用它:WeightedABCD(.25, .34, .25, .25)

编辑:这是一个即使权重加起来不等于 1.0 也能工作的版本:

from bisect import bisect_left
from random import uniform

def WeightedABCD(*weights):
  chars = 'ABCD'
  breakpoints = [sum(weights[:x+1]) for x in range(4)]
  return chars[bisect_left(breakpoints, uniform(0.0,breakpoints[-1]))]

关于python - 我需要一个 Python 函数,当给定所需的字符概率时,它将输出 4 个不同字符的随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/744127/

相关文章:

c++ - 一种简单的算法,采用两个 INT 并返回一个随机 INT

python - 如何在 python asyncio 中等待 select.select 调用

python - numpy中如何进行卷积矩阵运算?

python - 如何在 Django 中的表中添加减法选项

python - 如何验证 DRF 中的更新字段?

ios - 为什么这种随机颜色方法不起作用?

go - 在go中的给定范围内生成随机的128位十进制

python - 如何在 Python 中添加一个字符串和一个 int 对象?

c++ - Rand() % 14 只生成值 6 或 13

c# - 为什么序列化类中的 Random 实例会重复生成同一组数字?