我的问题是random.choice
功能。我们知道,当我们运行random.choice(['apple','banana'])
时,它将返回具有相同概率的'apple'
或'banana'
,如果我想返回偏差结果,例如,重新生成'apple'
该怎么办? 0.9概率和'banana'
概率为0.1?如何实现这个?
答案 0 :(得分:3)
一种基本的方法是获得0到1之间的兰特数并进行一些测试:
randNumber = random.random()
if randNumber < 0.9:
fruit = "apple"
else:
fruit = "banana"
可以简化为:['apple', 'banana'][random.random()>0.9]
(感谢@falsetru评论)
答案 1 :(得分:1)
重点是创建一个包含更多或更少特定元素的新列表 你不想偏见
应该这样做:
import random
a = ['apple','banana']
probability = [0.1,0.9]
def biase(lst,probability):
zipped = zip(lst,probability)
lst = [[i[0]] * int(i[1]*100) for i in zipped]
new = [b for i in lst for b in i]
return new
biased_list = biase(a,probability)
random_word = random.choice(biased_list)
print random_word
此代码在大多数情况下会产生banana
,因为字符串banana
重复90%而不是apple
我添加了一个名为概率的列表,我已经压缩了(订购了python列表)它,但字典更适合这类任务
如果你进入引擎盖并打印biased_list
,你会看到类似的东西:
['apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana']
答案 2 :(得分:0)
幸运的是,在Python 3中,您只需使用
即可import random
random.choices(a, probability)
#random.choices(population, weights=None, *, cum_weights=None, k=1)