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