Вы можете указать веса для random.choices (совокупность, веса = None, *, cum_weights = None, k = 1) .
Вам нужно делать это итеративно, чтобы иметь возможность для ссылки на последнее значение при поиске веса вам необходимо использовать:
import random
seq = [30, 170]
# weight lookup
wgt = {30: (90, 10), 170:(10, 90)}
r = []
for _ in range(24):
if not r:
# need some initial value: 50/50
r.append(random.choice(seq))
else:
# k == 1, using correct weights from lookup, use only single value and add it
r.append(random.choices(seq, weights=wgt[r[-1]], k=1)[0])
print(r)
Вывод за 8 прогонов:
[170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170]
[30, 30, 30, 30, 30, 30, 170, 170, 170, 170, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]
[30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]
[30, 30, 30, 30, 30, 170, 170, 170, 170, 170, 170, 170, 170, 30, 30, 170, 170, 170, 170, 170, 170, 170, 170, 170]
[170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 30, 30, 30, 170, 170, 170, 170]
[170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 30, 30, 30, 30, 30, 30, 30, 30, 30]
[30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]
[30, 30, 170, 170, 30, 170, 170, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]
Вы также можете сами указать вес:
seq = [30,170]
w = {30: (30,30,30,30,30,30,30,30,30,170), # if 30: use 9 * 30 + 1 * 170
170:(30,170,170,170,170,170,170,170,170,170)} # if 170: use 9 * 170 + 1 * 30
r = []
for _ in range(24):
if not r:
r.append(random.choice(seq))
else:
r.append(random.choice(w[r[-1]]))