How to parse a string and return a nested array?

前端 未结 7 2192
你的背包
你的背包 2020-11-30 07:48

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 mark

7条回答
  •  臣服心动
    2020-11-30 08:35

    Iterative.

    def foo(xs):
        stack = [[]]
        for x in xs:
            if x == '(':
                stack[-1].append([])
                stack.append(stack[-1][-1])
            elif x == ')':
                stack.pop()
                if not stack:
                    return 'error: opening bracket is missing'
                    #raise ValueError('error: opening bracket is missing')
            else:
                stack[-1].append(x)
        if len(stack) > 1:
            return 'error: closing bracket is missing'
            #raise ValueError('error: closing bracket is missing')
        return stack.pop()
    
    assert foo("abc") == ["a", "b", "c"]
    assert foo("a(b)c") == ["a", ["b"], "c"]
    assert foo("a(b(c))") == ["a", ["b", ["c"]]]
    assert foo("a((b(c))d)(e)") == ['a', [['b', ['c']], 'd'], ['e']]
    assert foo("a(b(c)") == "error: closing bracket is missing"
    assert foo("a(b))c") == "error: opening bracket is missing"
    assert foo("a)b(c") == 'error: opening bracket is missing'
    

提交回复
热议问题