【发布时间】:2021-03-11 18:32:39
【问题描述】:
我正在寻求优化一个简单的给定代码,该代码生成一个不在给定列表中的随机数 ([0,1,2])。随机数生成器是 ROOT 中的 TRandom3。
def getNumber(noList, randomgen):
#Fügen Sie hier Ihren Code ein!: ????
i = randomgen.Integer(3)
while i in noList:
i = randomgen.Integer(3)
return i
这是非常基本的,只会生成新的数字,直到达到允许的数字。
我自己优化的代码如下所示:
def bessereAuswahl(noList):
return random.choice([elem for elem in [0,1,2] if elem not in noList])
我只是从列表 [0,1,2] 中删除所有不允许的数字,然后使用 random.choice 选择一个元素。
在 Windows 10 上运行我的性能有所提高,在 linux 上运行相同的代码我的性能有所下降。
为什么会这样?
linux 上的 random 有隐藏的性能损失还是 pyroot 中的性能提升?
【问题讨论】:
-
我觉得你的设置有点奇怪,所以你有一个号码室 I,它分为 I1 允许号码和 I2 禁止号码,你从 I 中抽取数字,直到你从 I2 中抽取一个?或者目标是什么?
-
是的,就是这个想法。我从我的数字 [0,1,2] 中抽取,直到抽取一个不在我的第二个列表中的数字。由于这存在理论上无限运行时的问题,我编写了第二段代码,虽然我会更快,但由于某种原因,它只在 Windows 上而不是在 Linux 上。我想知道为什么它只在 Windows 上更快。
-
我的回答能回答你的问题吗?