鱼C论坛

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

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

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

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

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

x
举个例子,我有一个列表
[('a', 1), ('b', 3), ('c', 2), ('d', 3), ('e', 5)]
现在要在里面随机选取三个元组,并且元组的第二个数字越大,选取到的概率越大
如何实现这样的算法?
最佳答案
2022-11-18 22:14:22
本帖最后由 jackz007 于 2022-11-18 22:18 编辑
import random
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 编辑
import random
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 | 显示全部楼层
import random

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

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

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 15:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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