我想要一個Python函數,它接受一個字元串,並返回一個數組,其中數組中的每個項目都是一個字元,或者是另一個這樣的數組。嵌套數組在輸入字元串中以'('和以')'開頭標記。 因此,該函數將如下所示: 註意:我更喜歡純粹功能性的解決方案。 解決方案 和, ...
我想要一個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黑洞網,博客園同步更新