python - 括号匹配 - 查找带有输入括号索引的右括号 - ValueError

标签 python

新手在这里寻求有关我的括号代码的帮助。我想找到右括号的索引 来自给定起始索引的开/闭括号字符串

def matching_bracket(string, idx):
    string = list(string)
    a = {
        "(": ")",
        "[": "]",
        "{": "}",
        "<": ">"
    }
    close_bracket = a[string[idx]]
    if idx != ''.join(string).rindex(string[idx]):      #if open bracket is first bracket
        b = ''.join(string).rindex(string[idx])         #rightmost open bracket
        c = string[b:].index(close_bracket)             #next closest close bracket
        string[b], string[b+c:] = ".", "."              #replace both
        string = matching_bracket(''.join(string), idx)  # recurse
    else:
        d = string[idx:].index(close_bracket)
        return(idx + d)

matching_bracket("(([()]))",0)          #this fails, get error "ValueError: ')' is not in list"

matching_bracket('({})', 0) == 3             #yet these few output a correct val???
matching_bracket('([])', 1) == 2
matching_bracket('()()', 2) == 3

谁能帮帮我???

最佳答案

这是一种奇怪的方法(我通常会用堆栈做这样的事情)。但我可以看到一些问题,包括导致值错误的问题。

首先是 string[b+c:] 替换了索引 b+c 以后的所有内容,您确实想要 string[b+c]。因此,在第一次运行时 "(([()]))" 变为 "(([..",这不是您想要的。

第二个是您没有返回递归步骤返回的值。我在这里更新了这些。

def matching_bracket(string, idx):
    a = {
        "(": ")",
        "[": "]",
        "{": "}",
        "<": ">"
    }
    close_bracket = a[string[idx]]

    if idx != string.rindex(string[idx]):      #if open bracket is first bracket
        b = string.rindex(string[idx])         #rightmost open bracket
        c = string[b:].index(close_bracket)             #next closest close bracket
        str_list = list(string)
        str_list[b], str_list[b+c] = ".", "."              #replace both
        return matching_bracket(''.join(str_list), idx)  # recurse
    else:
        d = string[idx:].index(close_bracket)
        return idx + d

希望这能为您解决问题。

关于python - 括号匹配 - 查找带有输入括号索引的右括号 - ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60307753/

相关文章:

python - 当 Python 套接字连接失败时正确设置超时

python - 在 Python 中重载标准括号 ("()")

python - 当键是元组时访问字典的键并检查元组的元素是否相等

python - "not in"比较未按预期工作

python - 对 python 中正则表达式匹配的唯一值进行排序

python - concurrent.futures 的个别超时

python - 如何查找列表中前两个元素的索引,而前两个元素是另一个列表中的任何元素?

Pythons TexSoup 不解析文档

python - tkinter 中的命名颜色

python - 异常断言错误: AssertionError() in 'pyobjus.protocol_forwardInvocation' ignored