思路:参考抽奖,n张纸片其中k张是有奖的。根据抽奖原理每个人抽到的概率是一样的,但是随着抽奖的进行,前面人的结果会影响后面的人。因此,让list中的每一个数参与抽奖即可,即每个数产生一个0到1的随机数,与 剩余的奖/剩余的票 比较,若小于则视为抽中,即选择该数。
python代码:
import numpy as np
def choice(k,input_list):
ans_list = []
rest = len(input_list)
praise = k
for i in input_list:
if np.random.rand() < (praise/rest):
ans_list.append(i)
praise -= 1
rest -= 1
return ans_list
test_list = [5,3,6,7,2,1]
ans = choice(3,test_list)
print(ans)
输出:
[5, 6, 1]