gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:01:38 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com