Python实现基于权重的随机数2种方法

 更新时间:2015年04月28日 09:57:17   投稿:junjie  
这篇文章主要介绍了Python实现基于权重的随机数2种方法,本文直接给出实现代码,需要的朋友可以参考下

问题:

例如我们要选从不同省份选取一个号码,每个省份的权重不一样,直接选随机数肯定是不行的了,就需要一个模型来解决这个问题。
简化成下面的问题:

 字典的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 random 
import collections as coll 
 
data = {"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 4 
C 14 
B 7 
E 44 
D 31 
-------------------------------------------------- 
A 8 
C 16 
B 6 
E 43 
D 27 


思路:

思路都很原始可以参考下面的连接,还有别的好方法一起交流!!
代码: https://gist.github.com/orangle/d83bec8984d0b4293710
参考:
https://www.jb51.net/article/65060.htm
https://www.jb51.net/article/65058.htm

相关文章

  • 基于python plotly交互式图表大全

    基于python plotly交互式图表大全

    今天小编就为大家分享一篇基于python plotly交互式图表大全,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python gravis库实现图形数据可视化实例探索

    python gravis库实现图形数据可视化实例探索

    这篇文章主要为大家介绍了python gravis库实现图形数据可视化实例探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-02-02
  • 使用Python处理非标准JSON的实用方案

    使用Python处理非标准JSON的实用方案

    JSON(JavaScript Object Notation)作为轻量级数据交换格式被广泛使用,但实际开发中常遇到不符合标准规范的JSON数据,本文将探讨如何用Python处理这些特殊情况,并提供实用解决方案,需要的朋友可以参考下
    2025-09-09
  • Python实现的统计文章单词次数功能示例

    Python实现的统计文章单词次数功能示例

    这篇文章主要介绍了Python实现的统计文章单词次数功能,结合实例形式分析了Python针对字符串序列的遍历、计算等相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • 使用Python实现自动编写word文档

    使用Python实现自动编写word文档

    这篇文章主要为大家详细介绍了如何使用Python中的python-docx实现自动编写word文档,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2024-12-12
  • Python使用pickle模块储存对象操作示例

    Python使用pickle模块储存对象操作示例

    这篇文章主要介绍了Python使用pickle模块储存对象操作,结合实例形式分析了Python使用pickle模块针对文件读写与转换的相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • django开发post接口简单案例,获取参数值的方法

    django开发post接口简单案例,获取参数值的方法

    今天小编就为大家分享一篇django开发post接口简单案例,获取参数值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • django之用户、用户组及权限设置方式

    django之用户、用户组及权限设置方式

    这篇文章主要介绍了django之用户、用户组及权限设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • python一行代码合并了162个Word文件

    python一行代码合并了162个Word文件

    这篇文章主要为大家介绍了python一行代码合并了162个Word文件示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Pycharm学习教程(1) 定制外观

    Pycharm学习教程(1) 定制外观

    这篇文章主要介绍了最全的Pycharm学习教程第一篇如何定制外观,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论