days
和一个值
N
days = ['Monday','Tuesday','Wednesday','Thursday','Friday']
N = 52
我想做什么 我正在尝试创建一个用长度
selections
N
,但在cyproy
中均以cliformy的频率均匀地在
days
中均匀。也就是说,我想从订单方面随机选择52次,但最后的分布均匀分布(剩余时间很好)。示例输出 注意,该顺序是如何改组的,但是值的分布是均匀的
selections
['Wednesday','Friday','Monday',...'Tuesday','Thursday','Monday']
import collections
counter = collections.Counter(selections)
counter
Counter({'Monday': 11, 'Tuesday': 10, 'Wednesday': 11, 'Thursday': 10, 'Friday': 10})
N
值。
days
from random import choice, seed
seed(1)
days = ['Monday','Tuesday','Wednesday','Thursday','Friday']
N = 52
selections = [choice(days) for x in range(N)]
import collections
counter = collections.Counter(selections)
counter
Counter({'Tuesday': 9,
'Friday': 8,
'Monday': 14,
'Wednesday': 7,
'Thursday': 14})
??
days
??
eDit:显然,我似乎对这个问题的评价很差。我正在寻找具有长度
N
的列表,其中值均匀地分布了
N
,但是以一个的顺序(我是随机的含义)。因此,我想我正在寻找的是如何从
days
days
时间均匀地样品值,然后只是调整该列表。同样,我希望每个值的相等数量从
N
组成带有长度的列表。我需要一个均匀的分布来列表52列表,就像示例输出所示一样。根据文档
对于整数,从一个范围中进行了
均匀选择。对于序列,有一个随机元素的统一选择,即在本地列表中生成随机排列的函数,而无需替换就可以随机采样的函数。 [强调我的]您可能想象的差异归因于
随机。为了演示,我使用
days
,N
和choice
-您会注意到它们都提供相似的(随机)结果:
uniform
您拥有的代码是正确的。您看到均值周围的预期噪音。注意,对于较高的n,相对噪声会如预期的那样降低。例如,这就是您为
from collections import Counter from random import choice, seed, uniform, randint # seed(1) days = ['Monday','Tuesday','Wednesday','Thursday','Friday'] N = 52 selections = [choice(days) for _ in range(N)] # what you're doing now uni = [days[int(uniform(0, len(days)))] for _ in range(N)] randi = [days[randint(0, len(days) - 1)] for _ in range(N)] print(Counter(selections)) print(Counter(uni)) print(Counter(randi))
:
Counter({'Tuesday': 16, 'Thursday': 13, 'Wednesday': 9, 'Monday': 7, 'Friday': 7})
Counter({'Friday': 14, 'Wednesday': 11, 'Monday': 10, 'Thursday': 9, 'Tuesday': 8})
Counter({'Friday': 15, 'Monday': 12, 'Wednesday': 10, 'Tuesday': 9, 'Thursday': 6})
如果您需要等于或大致相等(确定性,而不是随机的)每个元素的数字,请尝试使用N = 10000000
Counter({'Tuesday': 2000695, 'Thursday': 2000615, 'Wednesday': 2000096, 'Monday': 1999526, 'Friday': 1999068})
的组合,例如:
itertools
输出:
random.shuffle