博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Python]基于权重的随机数2种实现方式
阅读量:6939 次
发布时间:2019-06-27

本文共 1496 字,大约阅读时间需要 4 分钟。

问题:

比如我们要选从不同省份选取一个号码。每一个省份的权重不一样,直接选随机数肯定是不行的了,就须要一个模型来解决问题。

简化成以下的问题:

 字典的key代表是省份,value代表的是权重,我们如今须要一个函数。每次基于权重选择一个省份出来

{"A":2, "B":2, "C":4, "D":10, "E": 20}

解决:

这是能想到和能看到的最多的版本号。不知道还没有更高效好用的算法。

#!/usr/bin/env python# -*- coding: utf-8 -*-#python2.7x#random_weight.py #author: orangleliu@gmail.com 2014-10-11'''每一个元素都有权重,然后依据权重随机取值输入 {"A":2, "B":2, "C":4, "D":10, "E": 20}输出一个值'''import randomimport collections as colldata = {"A":2, "B":2, "C":4, "D":6, "E": 11}#第一种 依据元素权重值 "A"*2 ..等,把每一个元素取权重个元素放到一个数组中。然后最数组下标取随机数得到权重def list_method():    all_data = []    for v, w in data.items():        temp = []        for i in range(w):            temp.append(v)        all_data.extend(temp)            n = random.randint(0,len(all_data)-1)    return all_data[n]    #另外一种 也是要计算出权重总和,取出一个随机数,遍历全部元素,把权重相加sum。当sum大于等于随机数字的时候停止。取出当前的元组def iter_method():    total = sum(data.values())    rad = random.randint(1,total)        cur_total = 0    res = ""    for k, v in data.items():        cur_total += v        if rad<= cur_total:            res = k             break    return res        def test(method):    dict_num = coll.defaultdict(int)    for i in range(100):        dict_num[eval(method)] += 1    for i,j in dict_num.items():        print i, j        if __name__ == "__main__":    test("list_method()")    print "-"*50    test("iter_method()")

一次运行的结果

A 4C 14B 7E 44D 31--------------------------------------------------A 8C 16B 6E 43D 27

思路:

思路都非常原始能够參考以下的连接,还有别的好方法一起交流!

代码: 

參考:

本文出自 博客,请务必保留此出处

转载地址:http://yeinl.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
Linux下安装jdk报Permission denied以及chmod详解
查看>>
网页制作设计师如何能说服客户让网站落地
查看>>
PG字符:使用collation设置排序规则
查看>>
Centos7 mariadb-galera-cluster-5.5+HAProxy+keepalived
查看>>
linuxPXE预启动执行环境
查看>>
Python进阶之装饰器
查看>>
如何做好企业级邮件系统的安全防范技术?
查看>>
虚拟化VMware之存储与虚拟主机管理(2)
查看>>
Linux下常用压缩解压缩、打包命令使用演示
查看>>
我的友情链接
查看>>
shell中变量的间接引用
查看>>
/var/目录下文件详解
查看>>
我的友情链接
查看>>
CentOS6.2+Kerio MailServer开源企业级邮件服务器
查看>>
Part07 - (图文)NSX系列之检查ESXi主机上VIBs的完整性
查看>>
ssh远程控制软件的应用
查看>>
二、lwip协议栈之telnet
查看>>
大家好
查看>>
谈谈Ext JS的组件——布局的使用方法
查看>>