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

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

如何在不使用正則表達式的情況下刪除 -> 之后的字符

如何在不使用正則表達式的情況下刪除 -> 之后的字符

炎炎設(shè)計 2023-12-12 21:31:07
給定一個字符串 s 表示在編輯器中鍵入的字符,其中“->”表示刪除,返回編輯器的當(dāng)前狀態(tài)。對于每一個“->”,它應(yīng)該刪除一個字符。如果有兩個“->”,即“->->”,則應(yīng)刪除該符號后的 2 個字符。實施例1Inputs = "a->bcz"Output"acz"解釋“b”被刪除刪除了。實施例2Input s = "->x->z"Outputempty string解釋所有字符均被刪除。另請注意,當(dāng)編輯器為空時,您也可以鍵入刪除。“”“我嘗試過以下功能,但 id 不起作用def delete_forward(text):"""return the current state of the editor after deletion of characters """f = "->"for i in text:    if (i==f):        del(text[i+1])在不使用正則表達式的情況下如何完成此操作?
查看完整描述

3 回答

?
郎朗坤

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

字符串不支持項目刪除。您必須創(chuàng)建一個新字符串。


>>> astring = 'abc->def'

>>> astring.index('->')  # Look at the index of the target string

3

>>> x=3

>>> astring[x:x+3]  # Here is the slice you want to remove

'->d'

>>> astring[0:x] + astring[x+3:]  # Here is a copy of the string before and after, but not including the slice

'abcef'

這僅處理每個字符串一個“->”,但您可以對其進行迭代。


查看完整回答
反對 回復(fù) 2023-12-12
?
繁花如伊

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

這是一個簡單的遞歸解決方案 -


# Constant storing the length of the arrow

ARROW_LEN = len('->')


def delete_forward(s: str):

    try:

        first_occurence = s.index('->')

    except ValueError:

        # No more arrows in string

        return s

    if s[first_occurence + ARROW_LEN:first_occurence + ARROW_LEN + ARROW_LEN] == '->':

        # Don't delete part of the next arrow

        next_s = s[first_occurence + ARROW_LEN:]

    else:

        # Delete the character immediately following the arrow

        next_s = s[first_occurence + ARROW_LEN + 1:]

    return delete_forward(s[:first_occurence] + s[first_occurence + ARROW_LEN + 1:])

請記住,Python 字符串是不可變的,因此您應(yīng)該依賴字符串切片來創(chuàng)建新字符串。


在每個遞歸步驟中,都會找到 的第一個索引->,并提取出在此之前的所有內(nèi)容。然后,檢查當(dāng)前位置后是否有另一個->緊隨其后的字符 - 如果有,請勿刪除下一個字符并delete_forward在第一次出現(xiàn)后調(diào)用所有內(nèi)容。如果緊隨其后的不是箭頭,則刪除當(dāng)前箭頭之后緊鄰的下一個字符,并將其送入delete_forward。


這將x->zb變成xb.


遞歸的基本情況是.index找不到匹配項,在這種情況下返回結(jié)果字符串。


輸出

>>> delete_forward('ab->cz')        

'abz'

>>> delete_forward('abcz')   

'abcz'

>>> delete_forward('->abc->z')

'bc'

>>> delete_forward('abc->z->')   

'abc'

>>> delete_forward('a-->b>x-->c>de->f->->g->->->->->')

'a->x->de'


查看完整回答
反對 回復(fù) 2023-12-12
?
慕的地10843

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

在 python 中可以有多種方法來實現(xiàn)這一點,例如:


使用拆分和列表推導(dǎo)式(如果您想在每次遇到一個或多個刪除字符時刪除單個字符):

def delete_forward(s):

    return ''.join([s.split('->')[0]] + [i[1:] if len(i)>1 else "" for i in s.split('->')[1:]])

現(xiàn)在delete_forward("a->bcz")返回'acz'&delete_forward("->x->z")返回''。請注意,這適用于每種可能的情況,無論是否有許多刪除字符,一個或根本沒有。此外,只要輸入是,它就永遠不會拋出任何異?;蝈e誤str。然而,這假設(shè)您每次遇到一個或多個刪除字符時都希望刪除單個字符。


如果要刪除與刪除字符發(fā)生次數(shù)一樣多的字符:

def delete_forward(s):

    new_str =''

    start = 0

    for end in [i for i in range(len(s)) if s.startswith('->', i)] +[len(s)+1]:

        new_str += s[start:end]

        count = 0

        start = max(start, end)

        while s[start:start+2] =='->':

            count+=1

            start+=2

        start += count

    return new_str

對于上述兩種情況,這會產(chǎn)生相同的輸出,但是對于 case: 'a->->bc',它會產(chǎn)生'a'而不是'ac'第一個函數(shù)產(chǎn)生的輸出。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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