根据概率做出选择 - Python

Making a choice based on probability - Python

my_list = [1,2,3,4,5,6,7,8,9,10] 

假设我们在 Python 中有一个这样的列表。我想一个一个地连续打印这个列表中的元素。但我希望元素 5 和小于 5 的元素有 80% 的机会出现在屏幕上,而其余元素有 20% 的机会出现在屏幕上。我该怎么做?

我的建议:

import random

my_list = [1,2,3,4,5,6,7,8,9,10]

print(random.choices(my_list, weights=(80,80,80,80,80,20,20,20,20,20)))

结果:

[8]
[2]
[2]
[1]
[4]
[5]

如果你输入'k'变量,你可以打印出k等于:

print(random.choices(my_list, weights=(80,80,80,80,80,20,20,20,20,20), k=10))

结果:

[1, 3, 5, 5, 1, 4, 4, 3, 2, 10]

几乎肯定有比这更好的解决方案,但这个可行。它首先通过说随机数是 8 还是 9 然后它在 20% (2/10) 中来计算它是否会在每一轮 (rand) 中处于 20% 或 80%,然后从相应的随机选择列表的一半。

import random
rand = random.randrange(0,9)
my_list = [1,2,3,4,5,6,7,8,9,10]
if rand == 8 or rand == 9:
    print(my_list[5:][random.randrange(0,4)])
else:
    print(my_list[:5][random.randrange(0,4)])