Вы можете использовать Counter
, чтобы подсчитать, сколько раз происходит переход, а затем вычислить вероятности для каждого перехода.
Вы можете использовать zip
, чтобы объединить два фрагмента списка m
- один с удаленным последним элементом и другой с удаленным первым элементом - чтобы получить кортежи для смежных элементов. zip(m[:-1], m[1:])
делает это. Затем вы можете сосчитать похожие кортежи, которые представляют переходы, с помощью Counter
:
from collections import Counter
m = [[213, 'vha'],
[342, 'gha'],
[523, 'xha'],
[121, 'gha'],
[812, 'gha'],
[612, 'vha'],
[123, 'gha']]
c = Counter([(x[1], y[1]) for x, y in zip(m[:-1], m[1:])])
probs = [(e, v / (len(m) - 1)) for e, v in c.items()]
for p in probs:
print(p)
выход
(('vha', 'gha'), 0.3333333333333333)
(('gha', 'xha'), 0.16666666666666666)
(('xha', 'gha'), 0.16666666666666666)
(('gha', 'gha'), 0.16666666666666666)
(('gha', 'vha'), 0.16666666666666666)