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

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

識別 Python 中的子字符串(沿字符串中的索引移動)

識別 Python 中的子字符串(沿字符串中的索引移動)

函數(shù)式編程 2023-02-07 10:44:35
我是 Python 和編碼的新手,并且堅持將子字符串與另一個字符串進(jìn)行比較。我有:字符串 sq 和模式 STR。目標(biāo):我正在嘗試計算連續(xù)出現(xiàn)在該字符串中的 STR 模式的最大數(shù)量。這是代碼的一部分: STR = key        counter = 0        maximum = 0        for i in sq:            while sq[i:i+len(STR)] == STR:                counter += 1                i += len(STR)問題似乎出現(xiàn)在“while部分”,說TypeError: can only concatenate str (not "int") to str。我看到它將i視為字符,將len(STR)視為 int,但我不知道如何解決此問題。這個想法是取第一個等于 STR 長度的子串,然后判斷這個子串和 STR 模式是否相同。
查看完整描述

2 回答

?
守著星空守著你

TA貢獻(xiàn)1799條經(jīng)驗 獲得超8個贊

通過循環(huán)使用:


for i in sq:

您正在遍歷.sq


相反,如果您希望變量i遍歷 的可能索引,sq您通常會遍歷range(len(sq)),以便從0到獲取值len(sq) - 1。


for i in range(len(sq)):

但是,在這種情況下,您想要分配給i循環(huán)內(nèi)部:


i += len(STR)

如果您正在循環(huán),這將不會產(chǎn)生預(yù)期的效果,range(...)因為在下一次迭代中它將被分配給來自 的下一個值range,忽略添加的增量。通常,不應(yīng)在循環(huán)內(nèi)分配給循環(huán)變量。


因此,它可能最容易通過循環(huán)實現(xiàn),并且您顯式while設(shè)置所需的值(在重新啟動循環(huán)之前進(jìn)行初始化),然后您可以在循環(huán)內(nèi)進(jìn)行任何其他賦值。ii=0i+=1


STR = "ell"

sq = "well, well, hello world"


counter = 0


i = 0

while i < len(sq):

    while sq[i:i+len(STR)] == STR:  # re use of while here, see comments

        counter += 1

        i += len(STR)

    i += 1


print(counter)  # prints 3

(您也許可以保存len(sq)并保存len(STR)在其他變量中以保存重復(fù)評估它們。)


查看完整回答
反對 回復(fù) 2023-02-07
?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗 獲得超8個贊

此解決方案不使用 afor因此增量可以在不匹配時增加一個,在匹配時增加字符串長度。任何不匹配記錄到目前為止看到的最大計數(shù)并重置計數(shù)。


def count_max(string,key):


    if len(key) > len(string):

        return 0


    last = len(string) - len(key)

    i = 0

    count = 0

    maximum = 0


    while i <= last:

        if string[i:i+len(key)] == key:

            count += 1

            i += len(key)

        else:

            maximum = max(maximum,count)

            count = 0

            i += 1

    return max(maximum,count)


key = 'abc'

strings = 'ab','abc','ababcabc','abcdefabcabc','abcabcdefabc'


for string in strings:

    print(count_max(string,key))

輸出:


0

1

2

2

2

這里還有一個可能更快的版本。對于短字符串,它并不快,但如果字符串很長,它會快得多,因為正則表達(dá)式會比 Python 循環(huán)更快地找到匹配項。


def count_max2(string,key):

    return max([len(match) // len(key)

                for match in re.findall(rf'(?:{re.escape(key)})+',string)]

               ,default=0)

怎么運行的:

  • re.escape是一個確保字符按key字面意義而不是正則表達(dá)式語法的函數(shù)。例如,允許搜索+,而不是被視為“一個或多個”匹配項。

  • rf''是原始f 字符串(格式字符串)的語法。建議對正則表達(dá)式使用“raw”,因為表達(dá)式的某些語法會與其他 Python 語法混淆。f-strings 允許使用大括號將變量和函數(shù)插入到字符串中{}。

  • re.findall查找字符串中的所有連續(xù)匹配項。

  • [f(x) for x in iterable]是一個列表推導(dǎo)式,獲取從 iterable 返回的列表,并計算列表中每個項目的函數(shù)。在這種情況下,如果用匹配的長度除以鍵的長度來得到鍵的出現(xiàn)次數(shù)。

  • max(iterable,default=0)返回 iterable 的最大值,如果 iterable 為空(無匹配項)則返回 0。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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