Kết quả không khớp với điều kiện

hiện em đang code một chương trình có thể mã hóa huffman động sử dụng python. Nhưng hiện code của em gặp trục trặc trong điều kiện phần “for x in oldtree”.
Khi chạy chương trình, Ở terminal em đang có kết quả sau mã hóa:

Ky tu:
[0, ' ']
[0, ' ', 1]
[0, ' ', 1, 's']
[1, 's']
[0, ' ', 1, 's', 2]
[0, ' ', 1, 's', 2, 'i']
[0, ' ', 1, 's', 2, 'i', 'h']
[0, ' ', 1, 's', 2, 'i', 'h', 'T']
['h', 'T']
[0, ' ', 1, 's', 2, 'i', 'h', 'T', 2]
['h', 'T']
[0, ' ', 1, 's', 2, 'i', 'h', 'T', 2, 2]
[0, ' ', 1, 's', 'i', 'h', 'T', 2, 3, 3]

[0, ' ', 1, 's'] thỏa mãn điều kiện if len(newtree) % 2 == 0:block = newtree[len(newtree) - 2:] nên sẽ có kết quả block [1, 's'] ( trong block = [0, x] ) nhưng khi xét đến [0, ' ', 1, 's', 2, 'i'] thì dù nó thỏa mãn điều kiện đầu nhưng lại không trả về kết quả block là [2, 'i'] mà lại tiếp tục xét đến chữ cái tiếp theo là h và T. Mọi người xem giúp em đoạn này em lỗi ở đâu ạ

phần code:

text = 'This '

print(f"Text: {text}\n")
textArr = []
textNumber = []
numberArr = []
treeText = []
oldtree = []
newtree = []
#Change to ASCII function
def ascii(symbol):
    ASCII = format(ord(symbol), '08b')
    return ASCII
#Tree Fix Function
def nodeUpdate(block):
    blockValue = []
    for x in block:
        if isinstance(x, int):
            blockValue.append(x)
        else:
            blockValue.append(textNumber[textArr.index(x)])
    return sum(blockValue)
def sapXep(a):
    treeNumber = [x if isinstance(x, int) else textNumber[textArr.index(x)] for x in a ]
    sortedNumber = sorted(range(len(treeNumber)), key=lambda i: treeNumber[i])
    a = [a[i] for i in sortedNumber]
    b = []
    oldA = [a[i : i+2] for i in range(0, len(a), 2)]
    blk = a[:2]
    b.extend(blk)
    if oldtree:
        for item in oldA:
            if oldA.index(item) >= 1:
                for y in item:
                    if isinstance(y, str):
                        b.append(y)
                    else:
                        b.append(nodeUpdate(blk))
                blk.clear()
                blk += b[len(b) - 2: ]
    return b
#TreeDraw
for x in text:
    print(f"Ky tu: {x}")
    if x not in textArr:
        block = [0, x]
        textArr.append(x)
        textNumber.append(1)
        newtree.extend(block)
        for x in oldtree:
            if isinstance(x, str):
                newtree.append(x)
                if len(newtree) % 2 == 0:
                    block = newtree[len(newtree) - 2:]
            else:
                print(block)
                newtree.append(nodeUpdate(block))
                if len(newtree) % 2 == 0:
                    block = newtree[len(newtree) - 2:]
            print(newtree)
        newtree = sapXep(newtree)
        print(newtree)
        oldtree = list(newtree)
        newtree.clear()

    print(' ')
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?