gok*_*pta 1 python probability python-3.x
我有清单a和b
a = [0.1, 0.3, 0.1, 0.2, 0.1, 0.1, 0.1]
b = [apple, gun, pizza, sword, pasta, chicken, elephant]
Run Code Online (Sandbox Code Playgroud)
现在,我想创建一个包含3个项目的新列表c
根据列表a中的概率从列表b中选择这3个项目
这些项目不应在列表c中重复
例如-我正在寻找的输出
c = [gun,sword,pizza]
Run Code Online (Sandbox Code Playgroud)
要么
c = [apple, pizza, pasta]
Run Code Online (Sandbox Code Playgroud)
注意 (列表a的所有值的总和为1,列表a和b中的项目数相同,实际上我在列表a和b中都有一千个项目,我想根据分配的概率从列表中选择一百个项目)给他们,python3)
用途random.choices:
>>> import random
>>> print(random.choices(
... ['apple', 'gun', 'pizza', 'sword', 'pasta', 'chicken', 'elephant'],
... [0.1, 0.3, 0.1, 0.2, 0.1, 0.1, 0.1],
... k=3
... ))
['gun', 'pasta', 'sword']
Run Code Online (Sandbox Code Playgroud)
编辑:为避免替换,您可以从总体中删除所选项目:
def choices_no_replacement(population, weights, k=1):
population = list(population)
weigths = list(weights)
result = []
for n in range(k):
pos = random.choices(
range(len(population)),
weights,
k=1
)[0]
result.append(population[pos])
del population[pos], weights[pos]
return result
Run Code Online (Sandbox Code Playgroud)
测试:
>>> print(choices_no_replacement(
... ['apple', 'gun', 'pizza', 'sword', 'pasta', 'chicken', 'elephant'],
... [0.1, 0.3, 0.1, 0.2, 0.1, 0.1, 0.1],
... k=3
... ))
['gun', 'pizza', 'sword']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |