鱼C论坛

 找回密码
 立即注册
查看: 2373|回复: 2

[已解决]有概率地随机选取列表里的元素

[复制链接]
发表于 2022-11-18 21:56:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
举个例子,我有一个列表
  1. [('a', 1), ('b', 3), ('c', 2), ('d', 3), ('e', 5)]
复制代码

现在要在里面随机选取三个元组,并且元组的第二个数字越大,选取到的概率越大
如何实现这样的算法?
最佳答案
2022-11-18 22:14:22
本帖最后由 jackz007 于 2022-11-18 22:18 编辑
  1. import random
  2. d = random . choices([('a', 1), ('b', 3), ('c', 2), ('d', 3), ('e', 5)] , [1 , 3 , 2 , 3 , 5] , k = 3)    # 参数 [1 , 3 , 2 , 3 , 5] 是权重,代表列表中 5 个元组被抽中的概率
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-18 22:14:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-18 22:18 编辑
  1. import random
  2. d = random . choices([('a', 1), ('b', 3), ('c', 2), ('d', 3), ('e', 5)] , [1 , 3 , 2 , 3 , 5] , k = 3)    # 参数 [1 , 3 , 2 , 3 , 5] 是权重,代表列表中 5 个元组被抽中的概率
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-18 22:31:05 | 显示全部楼层
  1. import random

  2. arr = [('a', 1), ('b', 3), ('c', 2), ('d', 3), ('e', 5)]
  3. res = []

  4. # 创建权重数组,数字越大,元素越多,被选中的几率越大
  5. for each in arr:
  6.     a, b = each
  7.     for n in range(b):
  8.         res.append(each)

  9. # 将随机选中的元素存入数组 ans 里
  10. ans = []
  11. while len(ans) != 3:
  12.     ans.append(random.choice(res))
  13.     ans = list(set(ans)) # 确保元素不重复

  14. print(ans) # 3 个无重复随机元素
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 07:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表