Вы можете сгенерировать случайный список, а затем слегка подправить числа, заменив числа, которые больше среднего (если текущее среднее значение слишком низкое), или заменив числа, которые меньше среднего (если текущее среднее слишком высокое). ) вот так
def gen_avg(n, expected_avg=20, a=2, b=25):
l = np.random.randint(a, b, size=n)
while True:
if np.mean(l) == expected_avg:
break
while np.mean(l) > expected_avg:
c = np.random.choice(np.where(l>expected_avg)[0])
l[c] = np.random.randint(a, expected_avg+1)
while np.mean(l) < expected_avg:
c = np.random.choice(np.where(l<expected_avg)[0])
l[c] = np.random.randint(expected_avg, b)
return l
Предполагается, что вам нет дела до производства какого-либо особенно интересного дистрибутива.