如何解析字符串并返回嵌套数组? [英] How to parse a string and return a nested array?
本文介绍了如何解析字符串并返回嵌套数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想要一个 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)") == 错误:缺少右括号5) foo("a(b))c") == 错误:缺少左括号6) foo("a)b(c") == 错误:缺少左括号
注意:我更喜欢纯粹功能性的解决方案.
解决方案
def foo(s):def foo_helper(level=0):尝试:令牌 = 下一个(令牌)除了停止迭代:如果级别 != 0:raise Exception('缺少结束括号')别的:返回 []如果令牌 == ')':如果级别 == 0:raise Exception('缺少开头括号')别的:返回 []elif 令牌 == '(':返回 [foo_helper(level+1)] + foo_helper(level)别的:返回 [令牌] + foo_helper(级别)令牌 = iter(s)返回 foo_helper()
还有,
<预><代码>>>>foo('a((b(c))d)(e)')['a', [['b', ['c']], 'd'], ['e']]I want a Python function that takes a string, and returns an array, where each item in the array is either a character, or another array of this kind. Nested arrays are marked in the input string by starting with '(' and ending with ')'.
Thus, the function would act like this:
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
Note: I'd prefer a solution that's purely functional.
解决方案
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()
And,
>>> foo('a((b(c))d)(e)')
['a', [['b', ['c']], 'd'], ['e']]
这篇关于如何解析字符串并返回嵌套数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文