第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在字符串中查找匹配的左/右大括號索引

在字符串中查找匹配的左/右大括號索引

吃雞游戲 2023-05-16 14:40:46
我想要這樣的字符串的 for 循環(huán)中相應(yīng)大括號的索引,例如:"(foo(bar))"。起初我是這樣做的,但它總是匹配最右/最左的大括號,因此它不適用于多個大括號:for item in string:    if item == "(":        matchingbraceindex = string.find(")", item)    elif item == ")":        matchingbraceindex = string.rfind("(", 0, item)然后我想數(shù)大括號,但我仍然得不到索引,只是在其他大括號中的位置,我想不出從中提取索引的方法。
查看完整描述

5 回答

?
牧羊人nacy

TA貢獻1862條經(jīng)驗 獲得超7個贊

使用堆棧,在遍歷字符串時跟蹤所有對:


def find_matching_parens(s, braces=None):

    openers = braces or {"(": ")"}

    closers = {v: k for k, v in openers.items()}

    stack = []

    result = []


    for i, c in enumerate(s):

        if c in openers:

            stack.append([c, i])

        elif c in closers:

            if not stack:

                raise ValueError(f"tried to close brace without an open at position {i}")


            pair, idx = stack.pop()

            result.append([idx, i])


            if pair != closers[c]:

                raise ValueError(f"mismatched brace at position {i}")

    

    if stack:

        raise ValueError(f"no closing brace at position {i}")


    return result


if __name__ == "__main__":

    print(find_matching_parens("(foo(bar)()baz(a(fz()asdf)))"))

輸出:


[[4, 8], [9, 10], [19, 20], [16, 25], [14, 26], [0, 27]]

如果您只想要特定索引的匹配括號,則可以對上述函數(shù)進行此修改:


def find_matching_paren(s, i, braces=None):

    openers = braces or {"(": ")"}

    closers = {v: k for k, v in openers.items()}

    stack = []

    result = []


    if s[i] not in openers:

        raise ValueError(f"char at index {i} was not an opening brace")


    for ii in range(i, len(s)):

        c = s[ii]


        if c in openers:

            stack.append([c, ii])

        elif c in closers:

            if not stack:

                raise ValueError(f"tried to close brace without an open at position {i}")


            pair, idx = stack.pop()


            if pair != closers[c]:

                raise ValueError(f"mismatched brace at position {i}")


            if idx == i:

                return ii

    

    if stack:

        raise ValueError(f"no closing brace at position {i}")


    return result


if __name__ == "__main__":

    print(find_matching_paren("(foo(barbaz(a(fz()asdf))))", 4)) # => 24


查看完整回答
反對 回復(fù) 2023-05-16
?
慕哥9229398

TA貢獻1877條經(jīng)驗 獲得超6個贊

堆棧是解決問題最簡單的方法。下面的解決方案將為您提供每對大括號的開始和結(jié)束索引作為元組列表。


在 [37] 中:string = '(foo(bar))'


In [38]: braces_stack = []

    ...:

    ...: pairs = []

    ...:

    ...: for index, char in enumerate(string):

    ...:     if char=='(':

    ...:         braces_stack.append(index)

    ...:     elif char==')':

    ...:         idx = braces_stack.pop()

    ...:         pairs.append((idx, index))

    ...:

    ...:


In [39]: pairs

Out[39]: [(4, 8), (0, 9)]


查看完整回答
反對 回復(fù) 2023-05-16
?
海綿寶寶撒

TA貢獻1809條經(jīng)驗 獲得超8個贊

indexes_of_opening_brackets = []

indexes_of_closing_brackets = []


for index, item in enumerate(string):

    if item == "(":

        indexes_of_opening_brackets.append(index)

    elif item == ")":

        indexes_of_closing_brackets.append(index)

我沒有嘗試代碼,但我認(rèn)為它會起作用。


查看完整回答
反對 回復(fù) 2023-05-16
?
揚帆大魚

TA貢獻1799條經(jīng)驗 獲得超9個贊

使用堆棧。推動左括號,直到遇到右括號,此時您已找到最里面的一對。從你的問題中不清楚你在尋找什么輸出,所以我不能說如何處理這些字母。



查看完整回答
反對 回復(fù) 2023-05-16
?
繁星coding

TA貢獻1797條經(jīng)驗 獲得超4個贊

試試這個,如果我正確理解你的問題,這就是你想要的。在這里,我在字符串中搜索“(”和“)”后將值附加到字典中


string = "(foo(bar))"


print(string.find(")"))

num = string.count(")")

a = 0

b = 0

dict_ = {"open": [], "close": []}

a = string.find("(", a)

dict_["open"].append(a)


for _ in range(0, num):

    a = string.find("(", a+1)

    dict_["open"].append(a)

    b = string.find(")", b+1)

    dict_["close"].append(b)


dict_["open"].pop(-1)

print(dict_)


查看完整回答
反對 回復(fù) 2023-05-16
  • 5 回答
  • 0 關(guān)注
  • 221 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號