繁体   English   中英

按对查找字符串中的所有括号-Python 3

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM