Python根据数值大小随机返回一个key,并保证返回这个key的概率和它所对应的value成正比
2017-06-29 14:30
761 查看
题目:def randomSymbol(symbolAndWeight):
”’
Input: symbolAndWeight is a dict of { str: int },
for example, {
‘a’: 2,
‘b’: 3,
‘c’: 5,
}
Returns:
随机返回symbolAndWeight中的一个key,并保证返回这个key的概率和它所对应的value成正比
解答:
参考链接:http://blog.sciencenet.cn/home.php?mod=space&uid=404069&do=blog&id=335920
”’
Input: symbolAndWeight is a dict of { str: int },
for example, {
‘a’: 2,
‘b’: 3,
‘c’: 5,
}
Returns:
随机返回symbolAndWeight中的一个key,并保证返回这个key的概率和它所对应的value成正比
解答:
#coding:utf-8 import random class t(): def __init__(self): pass def loadData(self): testData = {'a': '2', 'b': '3', 'c': '5'} return testData def randomSymbolol_1(self): testData = self.loadData() new_data = {v: k for k, v in testData.items()} keys = new_data.keys() list = [] for key in keys: for i in range(int(key)): list.append(new_data[key]) index = random.randint(0,len(list)-1) return list[index] def randomSymbolol_2(self): testData = self.loadData() new_data = {v: k for k, v in testData.items()} keys = new_data.keys() keySum = 0 for key in keys: keySum += int(key) ran = random.randint(0, keySum-1) sumtmp = 0 N = len(keys) for i in range(N): sumtmp += int(keys[i]) if sumtmp > ran: a = i return a return -1 t = t() i = 0 a_total1 = 0 b_total1 = 0 c_total1 = 0 while i < 10000: temp = t.randomSymbolol_2() if temp == 1: a_total1 += 1 elif temp == 0: b_total1 += 1 else: c_total1 += 1 i += 1 print "result of method 1:" print "a:", a_total1/float(10000) print "b:", b_total1/float(10000) print "c:", c_total1/float(10000) a_total2 = 0 b_total2 = 0 c_total2 = 0 j = 0 while j < 10000: temp = t.randomSymbolol_1() if temp == 'a': a_total2 += 1 elif temp == 'b': b_total2 += 1 else: c_total2 += 1 j += 1 print "result of method 2:" print "a:", a_total2/float(10000) print "b:", b_total2/float(10000) print "c:", c_total2/float(10000)
参考链接:http://blog.sciencenet.cn/home.php?mod=space&uid=404069&do=blog&id=335920
相关文章推荐
- hibernate通过sql查询返回一个key value对应的map对象型集合
- 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
- 根据表单的name(名字)数组,返回对应的Map对象。Map对象的key是表单的name,Map对象的value是表单的value
- 给定一个单链表,从链表返回一个随机节点的值。 每个节点必须具有相同的选择概率。 跟进: 如果这个链表非常大,而且它的长度不为人知呢? 你能解决这个问题,而不使用额外的空间?
- 设计一个函数,根据指定长度生成对应的验证码(由数字和大小写英文字母构成的随机字符串)
- python字典分别按照key和value升序或者降序排列--以给定一个含有重复元素的数组list,按照其出现次数大小降序输出
- LinkedHashMap实现分组排序(保证有序性),并实现map的一个key值对应多个value
- 004_021 Python 以指定的概率获取元素 以一个列表为基准概率,从一个列表中随机获取元素
- 文件生成器--可以根据设置大小随机生成一个文件
- 又是一道随机问题,问题是说:写一个函数返回0,1,2,3这几个数字中的一个数,其中0概率是10%,1是20%,2是30%,3是40%
- 2.创建一个20个大小的随机数组,然后输入一个数,判断是否存在这个数
- 写一个函数,要求传入一个1到n位数的随机数值,如传入随机数123456789,返回12345金币67银币89铜币,传入随机数1234,返回0金币12银币34铜币。 提示:推荐Int,Rnd,Mid,L
- 根据离散概率随机返回int值java代码&理解
- rust map的使用:获取某个key对应的value,如果不存在就插入一个
- 对导入的图像,随机用鼠标在图像中取一个点,算这个点到点A、B、C、D四个点距离最小者,返回该最小距离
- 编写一个函数,返回一个int数组中存储的最大数值,并在一个简单的程序中测试这个函数。(有缺陷)
- 根据value取得map中对应的key
- 多个KEY值对应一个VALUE的MAP
- /有一个函数fun能返回0和1两个值,返回0和1的概率都是1/2,问怎么利用这个函数得到另一个函数fun2,使fun2也只能返回0和1,且返回0的概率为1/4,返回1的概率为3/4
- 有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机