在python带权重的列表中随机取值的方法

1 random.choice

python random模块的choice方法随机选择某个元素

foo = ['a', 'b', 'c', 'd', 'e']
from random import choice
print choice(foo)

2 random.sample

使用python random模块的sample函数从列表中随机选择一组元素

list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
slice = random.sample(list, 5) #从list中随机获取5个元素,作为一个片断返回
print slice
print list #原有序列并没有改变。

3 python带权重的随机取值

import random
def random_weight(weight_data):
  total = sum(weight_data.values())  # 权重求和
  ra = random.uniform(0, total)  # 在0与权重和之前获取一个随机数
  curr_sum = 0
  ret = None
  keys = weight_data.iterkeys()  # 使用Python2.x中的iterkeys
#   keys = weight_data.keys()    # 使用Python3.x中的keys
  for k in keys:
    curr_sum += weight_data[k]       # 在遍历中,累加当前权重值
    if ra <= curr_sum:     # 当随机数<=当前权重和时,返回权重key
      ret = k
      break
  return ret
weight_data = {'a': 10, 'b': 15, 'c': 50}
random_weight(weight_data)

以上这篇在python带权重的列表中随机取值的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python实现一个带权无回置随机抽选函数的方法

    需求 有一个抽奖应用,从所有参与的用户抽出K位中奖用户(K=奖品数量),且要根据每位用户拥有的抽奖码数量作为权重. 如假设有三个用户及他们的权重是: A(1), B(1), C(2).希望抽到A的概率为25%,抽到B的概率为25%, 抽到C的概率为50%. 分析 比较直观的做法是把两个C放到列表中抽选,如[A, B, C, C], 使用Python内置的函数random.choice[A, B, C, C], 这样C抽到的概率即为50%. 这个办法的问题是权重比较大的时候,浪费内存空间. 更一般

  • Python利用带权重随机数解决抽奖和游戏爆装备问题

    关于带权随机数 为了帮助理解,先来看三类随机问题的对比: 1.已有n条记录,从中选取m条记录,选取出来的记录前后顺序不管. 实现思路:按行遍历所有记录,约隔n/m条取一个数据即可 2.在1类情况下,还要求选取出来的m条记录是随机排序的 实现思路: 给n条记录,分别增加一列标记,值为随机选取的1至n之间的不重复数据. 3.区别于1,2类问题, 如果记录是有权重的,如何结合权重去随机选取. 比如A的权重为10, B的权重股为5, C的权重为1, 则随机选取4个时可能应该出现AABB. 第3类问题便是

  • 在python带权重的列表中随机取值的方法

    1 random.choice python random模块的choice方法随机选择某个元素 foo = ['a', 'b', 'c', 'd', 'e'] from random import choice print choice(foo) 2 random.sample 使用python random模块的sample函数从列表中随机选择一组元素 list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] slice = random.sample(list, 5)

  • python 从list中随机取值的方法

    第一种方法(推荐) 适用于随机取一个值, 返回一个值 import random list1 = ['佛山', '南宁', '北海', '杭州', '南昌', '厦门', '温州'] a = random.choice(list1) print(a) # 返回一个值 第二种方法 适用于随机取一组值, 返回一个list import random list1 = ['佛山', '南宁', '北海', '杭州', '南昌', '厦门', '温州'] # 随机返回只有一个值的list a = rand

  • Python 利用切片从列表中取出一部分使用的方法

    我想从列表中取出一部分拿来使用,可以创建切片,指定需要使用的第一个元素和最后一个元素的索引 使用例子,说明切片的使用 #创建一个数字列表,代表我有100页文章,然后进行分页显示 mage=list(range(1,101)) max_count=len(mage) #使用len()获取列表的长度,上节学的 n=0 while n<max_count: #这里用到了一个while循环,穿越过来的 print(mage[n:n+10]) #这里就用到了切片,这一节的重点 n=n+10 输出: [1,

  • 在python中将字符串转为json对象并取值的方法

    如下所示: string =" { "status": "error", "messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."], "code": 404 }" print '对象:' string print '取值:' json.loads(string)['code']

  • python使用参数对嵌套字典进行取值的方法

    因一些特殊需求需要以参数的形式获取字典中特定的值,网上搜了一下并没有特别好的实现(并没有太认真去找~),所以自己实现了一个,以供大家参考:) . 话不多说,直接上代码: def dict_get(dic, locators, default=None): ''' :param dic: 输入需要在其中取值的原始字典 <dict> :param locators: 输入取值定位器, 如:['result', 'msg', '-1', 'status'] <list> :param d

  • Python实现统计给定列表中指定数字出现次数的方法

    本文实例讲述了Python实现统计给定列表中指定数字出现次数的方法.分享给大家供大家参考,具体如下: 直接看实现: #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:给定一个列表计数指定数字出现的所有次数 ''' def count_num_func(num_list,num): ''''' 计数指定数字 ''' split_list=[] for one in num_list: split_list+=list(str

  • 在python中只选取列表中某一纵列的方法

    如下所示: >>> a=random.randint(1,6,(5,3)) >>> a array([[5, 3, 1], [5, 5, 1], [5, 1, 3], [1, 4, 3], [5, 1, 2]]) >>> b=a.tolist() >>> b#选取b列表的前2列 [[5, 3, 1], [5, 5, 1], [5, 1, 3], [1, 4, 3], [5, 1, 2]] >>> c=mat(b) &

  • python 实现返回一个列表中出现次数最多的元素方法

    如下所示: # 返回一个列表中出现次数最多的元素 def showmax(lt):     index1 = 0                       #记录出现次数最多的元素下标     max = 0                          #记录最大的元素出现次数     for i in range(len(lt)):         flag = 0                    #记录每一个元素出现的次数         for j in range(i+1,

  • python找出一个列表中相同元素的多个索引实例

    定义:X=[1,2,3,1,4] 任务:找出元素为1的索引 Solution: # 如果直接用X.index(1),只能得到0这一个索引,而我们需要所有索引. l = len(X) zip_list = zip(*(range(l),X)) id1 = [z[0] for i,z in enumerate(zip_list) if z[1]==1] # 或者更简单的 id1 = [i for i,x in enumerate(X) if x==1] 以上这篇python找出一个列表中相同元素的多

  • python 返回一个列表中第二大的数方法

    如下所示: # 返回一个列表中第二大的数 def second(ln): max = 0 s = {} for i in range(len(ln)): flag = 0 for j in range(len(ln)): if ln[i] >= ln[j] and i != j: flag = flag + 1 s[i] = flag if flag > max: max = flag print(s) for i in s: if s[i] == max - 1: break print(l

随机推荐