Мне надо генерировать случайные числа от А до B, но числа больше Х должны появляться в F раз чаще. Х лежит между А и В
То есть скрипт
def shift_rand(a, b, x, f):
#???
rnd = [shift_rand(0, 4, 2, 2) for i in range(1000)]
for i in range(5):
print(i, '-', rnd.count(i))
должен выдать что-то вроде:
0 - 142
1 - 140
2 - 145
3 - 285
4 - 288
Решение "в лоб" слишком бьёт по производительности:
def shift_rand(a, b, x, f):
m = []
for i in range(a, b + 1):
if i <= x:
m.append(i)
else:
for j in range(f):
m.append(i)
return m[random.randint(0, len(m) - 1)]
Может кто подскажет более изящный алгоритм?
PS: ЯП не важен