[英]Find all parentheses in a string by pairs - Python 3
我试图得到一个元组的列表,其中包含字符串中所有括号的索引。 通过列表推导,我可以轻松地独立地找到左右括号:
s = "12(34)567"
left_parens = [i for i,j in enumerate(s) if j == "("]
right_parens = left_parens = [i for i,j in enumerate(s) if j == ")"]
将这些单独的列表转换为具有(左对中,右对中)对的元组列表的最合乎逻辑的方法是使用zip函数。
parens = zip(right_parens,left_parens)
print(list(parens))
由此,我期望产生:
[(2,5)]
但是,相反,我得到:
[(5,5)]
即使我这样切换顺序:
parens = zip(left_parens,right_parens)
结果仍然是[(5,5)]。
我想念什么?
问题在这里:
right_parens = left_parens = [ ... ]
您将两个列表设置为相同的存储区; 他们现在是相同的列表。 将它们分开:
left_parens = [i for i,j in enumerate(s) if j == "("]
right_parens = [i for i,j in enumerate(s) if j == ")"]
延期
请注意,您的算法不适用于嵌套括号:
s = "1(2(34)56)7"
输出:
[(1, 6), (3, 9)]
您可以使用计数器解决此问题:每个Lparen的增量前,每个Rparen的增量后。 用嵌套级别标记每个paren位置:
string 1(2(34)56)7(8)
marker -1-2--2--1-1-1
从这里开始,由内而外移动:从左到右匹配2(仅一对),然后匹配1(两对)。 编码留给学生练习。 :-)从这里,您可以
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.