JKR*_*KRH 5 python loops probability
我正在尝试创建一个循环,该循环将生成一系列概率,可以将值列表与这些概率进行比较。我需要概率采用列表形式,并且列表的长度可以变化。例如,如果列表是,lst = [1, 2, 3]并且我想将调用概率设置lst[2]为 80%,并且其他两个值的可能性相同,那么我将使用p = [0.1, 0.1, 0.8]。
我希望能够循环遍历所有可能的概率(在本例中具有可定义的步骤step = 0.1)。我的逻辑在这一点上被卡住了:
lst = [1, 2, 3]
step = 0.1
for p in probability_gen_function(lst, step):
print(p)
loop_1 -> p = [0.1, 0.1, 0.8]
loop_2 -> p = [0.1, 0.2, 0.7]
---
loop_n -> p = [0.8, 0.1, 0.1]
Run Code Online (Sandbox Code Playgroud)
我可以找到probability_gen_function生成随机概率列表的方法,但不知道如何系统地循环它们。任何建议,将不胜感激。
您可以使用递归生成器函数:
lst = [1, 2, 3]
step = 0.1
def prob_gen(d, s, c = []):
if len(c) == len(d):
yield [round(i, 2) for i in c]
else:
r = 10-sum(int(k*10) for k in c)
for i in ([r] if len(c)+1 == len(d) else range(1, r)):
yield from prob_gen(d, s, c+[s*i])
print(list(prob_gen(lst, step)))
Run Code Online (Sandbox Code Playgroud)
输出:
[[0.1, 0.1, 0.8], [0.1, 0.2, 0.7], [0.1, 0.3, 0.6], [0.1, 0.4, 0.5], [0.1, 0.5, 0.4], [0.1, 0.6, 0.3], [0.1, 0.7, 0.2], [0.1, 0.8, 0.1], [0.2, 0.1, 0.7], [0.2, 0.2, 0.6], [0.2, 0.3, 0.5], [0.2, 0.4, 0.4], [0.2, 0.5, 0.3], [0.2, 0.6, 0.2], [0.2, 0.7, 0.1], [0.3, 0.1, 0.6], [0.3, 0.2, 0.5], [0.3, 0.3, 0.4], [0.3, 0.4, 0.3], [0.3, 0.5, 0.2], [0.3, 0.6, 0.1], [0.4, 0.1, 0.5], [0.4, 0.2, 0.4], [0.4, 0.3, 0.3], [0.4, 0.4, 0.2], [0.4, 0.5, 0.1], [0.5, 0.1, 0.4], [0.5, 0.2, 0.3], [0.5, 0.3, 0.2], [0.5, 0.4, 0.1], [0.6, 0.1, 0.3], [0.6, 0.2, 0.2], [0.6, 0.3, 0.1], [0.7, 0.1, 0.2], [0.7, 0.2, 0.1], [0.8, 0.1, 0.1]]
Run Code Online (Sandbox Code Playgroud)