【发布时间】:2013-06-13 00:19:03
【问题描述】:
我想要一个 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
注意:我更喜欢纯功能性的解决方案。
【问题讨论】:
-
在这里使用递归,非常合适。在令牌流中找到“(”意味着递归。在顶级调用中找到“)”意味着存在平衡不匹配。
-
确实是递归。只要字符串不太长,就是这样。还请记住,这可能需要一个包装函数,因为我们需要检查 '(' 的数量是否与 ')' 的数量匹配。如果是这样,请调用递归函数。如果不是,请给出适当的错误消息。
-
是的,我知道我会在这里使用递归。我知道如何编写一个函数(使用堆栈)来返回字符串中的括号是否平衡且有序,但它正在采取下一步并试图返回让我难过的嵌套数组。这不是家庭作业。这是一个更大的解析程序的一部分。
标签: python arrays string parsing nested