Question: 
Write a function to check if the given expression is balanced or not.


Model's Code:
def check_expression(expr):
    stack = []
    pairing = {')': '(', '}': '{', ']': '['}
    
    for char in expr:
        if char in pairing.values():
            stack.append(char)
        elif char in pairing.keys():
            if stack == [] or pairing[char] != stack.pop():
                return False
    return stack == []



Sample Correct Code:
from collections import deque
def check_expression(exp):
    if len(exp) & 1:
        return False
    stack = deque()
    for ch in exp:
        if ch == '(' or ch == '{' or ch == '[':
            stack.append(ch)
        if ch == ')' or ch == '}' or ch == ']':
            if not stack:
                return False
            top = stack.pop()
            if (top == '(' and ch != ')') or (top == '{' and ch != '}' or (top == '[' and ch != ']')):
                return False
    return not stack


Asserts:
assert check_expression("{()}[{}]") == True
assert check_expression("{()}[{]") == False
assert check_expression("{()}[{}][]({})") == True


Tests:
Test 1 of 3: PASS
Test 2 of 3: PASS
Test 3 of 3: PASS

Test 771 of 974: 583/771 (75.61608300907912%): success