我想要一個Python函數,它接受一個字符串,並返回一個數組,其中數組中的每個項目都是一個字符,或者是另一個這樣的數組。嵌套數組在輸入字符串中以'('和以')'開頭標記。
因此,該函數將如下所示:
1) foo("abc") == ["a", "b", "c"] 2) foo("a(b)c") == ["a", ["b"], "c"] 3) foo("a(b(c))") == ["a", ["b", ["c"]]] 4) foo("a(b(c)") == error: closing bracket is missing 5) foo("a(b))c") == error: opening bracket is missing 6) foo("a)b(c") == error: opening bracket is missing
注意:我更喜歡純粹功能性的解決方案。
解決方案
def foo(s): def foo_helper(level=0): try: token = next(tokens) except StopIteration: if level != 0: raise Exception('missing closing paren') else: return [] if token == ')': if level == 0: raise Exception('missing opening paren') else: return [] elif token == '(': return [foo_helper(level+1)] + foo_helper(level) else: return [token] + foo_helper(level) tokens = iter(s) return foo_helper()
和,
>>> foo('a((b(c))d)(e)') ['a', [['b', ['c']], 'd'], ['e']]
本文首發於Python黑洞網,博客園同步更新