簡體   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