假设我有3个列表
old_people = ['George', 'Bob', 'Owen']
young_people = ['Sarah', 'Gwen', 'Brittney']
mid_age = ['Larry', 'Missy', 'Greg']
import random
random.choice(old_people)
Run Code Online (Sandbox Code Playgroud)
从一个选择,我将如何以相同的概率从所有三个列表中选择1个名称?
假设通过"所有三个列表中具有相同概率的1个名称"意味着每个名称将具有相同的被选择概率,因为random.choices在python 3.6中引入,可以相对直接地执行此操作而无需连接以构建一个巨人名单.例如:
In [52]: seqs = [old_people, young_people, mid_age]
In [53]: random.choice(random.choices(seqs, weights=map(len, seqs))[0])
Out[53]: 'Larry'
Run Code Online (Sandbox Code Playgroud)
我们选择其中一个列表使用长度来加权我们的选择,然后我们从该列表中统一选择. seqs只列出对子列表的引用,因此不执行连接.
作为统一性的健全性检查:
In [65]: seqs = [["Bob"], ["Fred", "Sally"]]
In [66]: Counter(random.choice(random.choices(seqs, weights=map(len, seqs))[0])
for _ in range(10**6))
Out[66]: Counter({'Bob': 333484, 'Fred': 332755, 'Sally': 333761})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2488 次 |
| 最近记录: |