鱼cpython学习者 发表于 2022-11-18 21:56:44

有概率地随机选取列表里的元素

举个例子,我有一个列表
[('a', 1), ('b', 3), ('c', 2), ('d', 3), ('e', 5)]
现在要在里面随机选取三个元组,并且元组的第二个数字越大,选取到的概率越大
如何实现这样的算法?

jackz007 发表于 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)] , , k = 3)    # 参数 是权重,代表列表中 5 个元组被抽中的概率

傻眼貓咪 发表于 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 个无重复随机元素
页: [1]
查看完整版本: 有概率地随机选取列表里的元素