问题:

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

简化成以下的问题:

字典的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

參考:

http://jzkangta.iteye.com/blog/1326302

http://blog.csdn.net/ajian005/article/details/19301689

本文出自 “orangleliu笔记本”博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/39997489

[Python]基于权重的随机数2种实现方式的更多相关文章

  1. 基于Qt有限状态机的一种实现方式和完善的人工智能方法

    基于Qt有限状态机的一种实现方式和完善的人工智能方法 人工智能在今年是一个非常火的方向,当然了.不不过今年,它一直火了非常多年,有关人工智能的一些算法层出不穷.人工智能在非常多领域都有应用,就拿我熟悉 ...

  2. python全栈开发day38-css三种引入方式、基础选择器、高级选择器、补充选择器

    一.昨日内容回顾 div:分割整个网站,很多块 (1)排版标签 (2)块级标签 独占一行 可以设置高和宽,如果不设置宽高,默认是父盒子的宽 span: (1) 小区域 (2)文本标签 (3)在一行内显 ...

  3. UI自动化(selenium+python)之元素定位的三种等待方式

    前言 在UI自动化过程中,常遇到元素未找到,代码报错的情况.这种情况下,需要用等待wait. 在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverW ...

  4. Python - 生成随机验证码的3种实现方式

    生成6位随机验证码的3种实现方式如下: 1. 简单粗暴型:所有数字和字母都放入字符串: 2. 利用ascii编码的规律,遍历获取字符串和数字的字符串格式: 3. 引用string库. 方法1代码: i ...

  5. Python中的单例模式的几种实现方式的优缺点及优化

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  6. Python中的单例模式的几种实现方式的及优化

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  7. 二、spring Boot构建的Web应用中,基于MySQL数据库的几种数据库连接方式进行介绍

    包括JDBC.JPA.MyBatis.多数据源和事务. 一.JDBC 连接数据库 1.属性配置文件(application.properties) spring.datasource.url=jdbc ...

  8. python爬虫之数据的三种解析方式

    一.正则解析 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [0-9] \D : 非数字 \w :数字.字母.下划线.中文 \W : 非\ ...

  9. python中package机制的两种实现方式

    当执行import module时,解释器会根据下面的搜索路径,搜索module1.py文件. 1) 当前工作目录 2) PYTHONPATH中的目录 3) Python安装目录 (/usr/loca ...

随机推荐

  1. vue工程化:返回顶部和底部的动画效果

    . <template> <div> <div class="scroll" :class="{show:isActive}"&g ...

  2. js 上传图片、压缩、旋转

    亲测 <!doctype html> <html> <head> <meta charset="utf-8"> <title& ...

  3. Python3.5安装wxpython

    摘要:安装python3.X的wxpython:学习<Python基础教程>第12章“图形用户界面”时,关于升级pip和安装wxpython时遇到的一些问题和解决办法. 关于升级pip 使 ...

  4. IDEA打war包部署本地TOMCAT测试

    在Eclipse中打war包很方便,导出即可直接选择war包,如下图所示: 但是在IDEA中有点麻烦,网上很多教程,做的也都很好,我自己也做一份,加深一下印象. 首先打开File->Projec ...

  5. Yii 2.0 query模式语法

    项目使用Yii 2.0版本开发,个人一直喜好使用(new \yii\db\Query())模式操作数据,把增.删.查.改这4种情况的写法整理出来,方便查阅和记忆. 增加 - insert use Yi ...

  6. Go:map

    一.map的创建方式 func main() { // map创建方式1 // 声明后再make var stu1 map[int]string stu1 = make(map[int]string, ...

  7. Jquery 动态添加元素后,获取不到元素对象情况

  8. mysql常用命令用法

    Mysql帮助文档地址:http://dev.mysql.com/doc/ 1.创建数据库: create database database_name; 2.选择数据库: use database_ ...

  9. 零基础入门Python数据分析,只需要看懂这一张图,附下载链接!

    摘要 在做数据分析的过程中,经常会想数据分析到底是什么?为什么要做数据数据分析?数据分析到底该怎么做?等这些问题.对于这些问题,一开始也只是有个很笼统的认识. 最近这两天,读了一下早就被很多人推荐的& ...

  10. Matlab学习笔记(五)

    三.矩阵运算 (一)矩阵函数和特殊矩阵 常见的矩阵处理函数 表3-1    常见的矩阵函数 函数 说明 /或\ 矩阵除法中的左除或右除,可以用于求解线性方程组 accumarray(ind,val) ...