words = ['', 'the', 'aged', 'bottle', 'flies', 'fast', ''] k = len(words) T = ['', 'adj', 'adv', 'det', 'n', 'v', ''] cardT = len(T) a = [[0.0, 0.4, 0.2, 0.2, 0.1, 0.1, 0.0], [0.0, 0.2, 0.1, 0.0, 0.3, 0.2, 0.2], [0.0, 0.2, 0.2, 0.1, 0.1, 0.2, 0.2], [0.0, 0.3, 0.1, 0.0, 0.5, 0.1, 0.0], [0.0, 0.1, 0.1, 0.1, 0.2, 0.3, 0.2], [0.0, 0.2, 0.3, 0.1, 0.2, 0.0, 0.2], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]] b = [[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0], [0.0, 0.1, 0.0, 0.0, 0.0, 0.01, 0.0], [0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0], [0.0, 0.0, 0.0, 0.0, 0.1, 0.2, 0.0], [0.0, 0.1, 0.3, 0.0, 0.01, 0.1,0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0]] b = dict(zip(words,b)) alpha = [None for _ in range(k)] alpha[0] = b[""] for t in range(1,k): alpha[t] = [sum([alpha[t-1][i] * a[i][j] for i in range(cardT)])*b[words[t]][j] for j in range(cardT)] for group in alpha: print group