擅长:python、mysql、java
<p>可以使用<code>*args</code>以列表形式获取所有参数。然后您可以遍历它们,以找到<code>randomInt</code>命中了哪一个。你知道吗</p>
<pre><code>def weighted_random(*weights):
totalWeight = sum(weights)
randomInt = random.randint(1, totalWeight)
for i, weight in enumerate(weights):
if randomInt <= weight:
return i
randomInt -= weight
return "error"
</code></pre>
<p>如果可读性太强或O(n)太快,请尝试以下方法:</p>
<pre><code>def weighted_random(*weights):
randomInt = random.randint(1, sum(weights))
return next((
i for i in range(len)
if sum(weights[:i+1]) < randomInt <= sum(weights[:i+2])
), "error")
</code></pre>