有概率地随机选取列表里的元素
举个例子,我有一个列表[('a', 1), ('b', 3), ('c', 2), ('d', 3), ('e', 5)]
现在要在里面随机选取三个元组,并且元组的第二个数字越大,选取到的概率越大
如何实现这样的算法? 本帖最后由 jackz007 于 2022-11-18 22:18 编辑
import random
d = random . choices([('a', 1), ('b', 3), ('c', 2), ('d', 3), ('e', 5)] , , k = 3) # 参数 是权重,代表列表中 5 个元组被抽中的概率 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]