【发布时间】:2021-07-20 20:38:21
【问题描述】:
我正在尝试加速我的代码,该代码具有以下形式的长 if/elif 语句:
random = np.random.random()
tot = a + b + c + d
if random < a/tot:
var1 += 1
elif a/tot < random < (a+b)/tot:
var1 -= 1
elif (a+b)/tot < random < (a+b+c)/tot:
var2 += 1
elif (a+b+c)/tot < random < 1:
var2 -= 1
我试图想办法用字典来做到这一点,但我不知道如何索引它。代码按原样工作,但是我正在尝试加快这部分代码的速度,这会占用大量运行时间。有没有其他方法可以做到这一点?
【问题讨论】:
-
一个明显的优化:
elif a/tot < random < ...、elif (a+b)/tot < random < ...、elif (a+b+c)/tot < random < ...,你已经在之前的if/elif正文中验证了这些,你只需要对每个elif进行第二次比较 -
最后一个比较不应该是
< 1(或者干脆不说)?使用< tot可能是错误的。如果(a+b)/tot == random又会怎样?在您的示例中,没有涵盖这种情况。 -
var2真的与var1耦合吗?这样写,每个事件 (a,b,c,d) 是完全相互独立的(它们之间没有交集) -
是的@a_guest,这是我的错误。
-
与其用tot除,不如在if之前用tot多随机一次
标签: python python-3.x if-statement random