def balanced_parentheses(paren_str): """problem involving applications of stack""" # filter out all values besides brackets matches = re.finditer(r'[(){}[\]]+', paren_str) parsed_iter = itertools.chain.from_iterable( result.group() for result in matches) opening = Stack() for i in parsed_iter: if i in ("(", "{", "["): opening.add(i) else: if not opening.isEmpty(): if i == ")" and opening.peek() == "(": opening.get() elif i == "}" and opening.peek() == "{": opening.get() elif i == "]" and opening.peek() == "[": opening.get() else: return False else: return False return True
def revstringstack(str): # with stack implemented stack = Stack() for char in str: stack.add(char) new_str = '' while not stack.isEmpty(): new_str += stack.get() return new_str
class TestStack(unittest.TestCase): @staticmethod def add_to_structure(self, items): for i in items: self.structure.add(i) def setUp(self): self.structure = Stack() def test_structure_isEmpty(self): self.assertEqual(self.structure.isEmpty(), True) self.add_to_structure(self, range(3)) self.assertEqual(self.structure.isEmpty(), False) def test_structure_peek(self): structure = self.add_to_structure( self, iter(['people', 'potatoes', 'pansies'])) self.assertEqual(self.structure.peek(), 'pansies') def test_structure_get_length(self): structure = self.add_to_structure(self, range(5)) self.assertEqual(self.structure.get_length(), 5) def test_structure_get(self): structure = self.add_to_structure(self, range(3)) # test that first in are first out for i in reversed(range(3)): self.assertEqual(self.structure.get(), i) def test_empty_items(self): # for when get, or peek is called on empty structure self.assertRaises(EmptyItemsError, lambda: self.structure.get()) self.assertRaises(EmptyItemsError, lambda: self.structure.peek())