【发布时间】:2020-09-22 17:08:08
【问题描述】:
我正在创建一种彩票系统,其中个人(通过唯一 ID 标识)可以拥有多张彩票进入彩票,但是一旦被选中,就无法再次中奖。
这是我的例子:
import random
entrants = ['John', 'Jane', 'Cthulhu']
allEntries = []
for entrant in entrants:
numEntries = random.randint(1, 5)
print("%s has %d entries" % (entrant, numEntries))
allEntries.extend([entrant] * numEntries)
print(random.sample(allEntries, k=2))
我的想法是创建一个列表,其中包含 entrant 的名称 numEntries 次,然后从中进行选择。然而,有时同一个人被选为两个获胜者。有没有办法为每个参赛者设置权重?
我尝试将random.choices() 与weights 一起使用,但这也可以选择同一个人作为两个获胜者。
import random
weights = []
for entrant in entrants:
numEntries = random.randint(1, 5)
print("%s has %d entries" % (entrant, numEntries))
weights.extend([numEntries])
print(random.choices(entrants, weights=weights, k=2))
【问题讨论】:
-
为什么不随机打乱列表并从中获取 N 个项目?
-
@RandomDavis 它的权重如何?名单可以改组,但仍然有同一个人成为获胜者。
-
stackoverflow.com/questions/43549515/… 的可能重复项 - 尽管这主要针对 numpy 解决方案。
-
您想选出多少名获奖者?它总是 2 还是也不同?
-
不幸的是,由于您是从两个不同(但相关)的加权样本中提取的,
random和numpy.random不支持您的用例的简单解决方案。一次选出一个获胜者,从您的数据集中删除每个获胜者。