如何生成特定均值的随机int?

时间:2014-06-03 20:54:01

标签: python random

我需要在23到72之间生成100个年龄值,平均值必须为42年。

您认为标准python中是否已存在此功能?如果没有,我认为我已经足够了解python并且应该能够对算法进行编码,但我希望有一些东西可供使用。任何提示?

2 个答案:

答案 0 :(得分:1)

我认为你可以填充一个大小为100的数组,所有42个作为条目。

然后随机选择两个指数,检查它们的值,如果可以接受,则调整1。

我只是在这里猜测,但这就是我所做的,不确定分配到底是什么,但是平均值已经死了,并且看起来相当均匀地覆盖范围的值...对不起它很乱,但我只是想在离开工作之前把东西扔得很快!

def age_arr():
    age_A = []
    for _i in range(100):
        age_A.append(42)

    for _i in range(100000):
        rand_ind_1 = randint(0,99)
        rand_ind_2 = randint(0,99)

        val_1 = age_A[rand_ind_1] #Subtract from
        val_2 = age_A[rand_ind_2] #Add to

        if val_1 == 23 or val_2 == 72:
            age_A[rand_ind_1] += 1
            age_A[rand_ind_2] -= 1

        age_A[rand_ind_1] -= 1
        age_A[rand_ind_2] += 1
    sum = 0
    for val in age_A:
        sum += val
    print(age_A)
    print('Average: ' + str(sum/100))

输出:

[29, 27, 51, 68, 28, 40, 72, 42, 41, 31, 59, 46, 61, 52, 43, 26, 34, 29, 41, 23,
 37, 27, 45, 23, 49, 43, 28, 24, 60, 43, 65, 57, 27, 46, 35, 52, 23, 34, 47, 39,
 64, 52, 46, 48, 30, 27, 23, 30, 57, 34, 46, 26, 29, 30, 55, 72, 34, 52, 66, 38,
 69, 34, 24, 40, 39, 59, 67, 39, 39, 26, 70, 36, 31, 50, 29, 59, 64, 52, 40, 33,
 62, 32, 53, 41, 45, 24, 47, 27, 23, 39, 68, 24, 34, 36, 56, 36, 32, 49, 40, 26]
Average: 42.0

答案 1 :(得分:0)

是的,有。它是random.triangular(min, max, av)

您的平均值将接近,但不等于av。

编辑:见下面的评论,这有弊。