簡體   English   中英

如何在不使用 replace() 方法的情況下從字符串中刪除特定元素?

[英]How do I remove specific elements from a string without using replace() method?

我正在嘗試使用其索引遍歷字符串並刪除特定元素。 由於字符串長度隨着元素的刪除而變短,因此在到達最終元素時它總是超出范圍。

這是一些代碼來說明我正在嘗試做的事情。 例如,從“1.2.3.4”變為“1234”。

string = "1.2.3.4"
for i in range(len(string)):
    if string[i] == ".":
        string = string[:i] + string[i+1:]

我知道有替代方法,例如使用名為replace()的字符串方法,我可以運行string = string.replace(string[i], "", 1)或者我可以遍歷單個元素(而不是索引)。

但是我將如何使用上述方法(遍歷字符串索引)來解決它? 在循環到達字符串的最后一個元素后,我可以使用哪些技術來停止循環? 在不繼續推進索引的情況下,這將使 go 超出范圍,因為字符串中的元素已被刪除。

用這個:

string = "1.2.3.4"
res = ""
for s in string: 
    if s != '.': 
        res += s

結果當然是“1234”。

可以這樣完成(使用 try/except 塊),但這並不是解決這個問題(或任何問題)的好方法

string = "1.2.3.4"


for i in range(len(string)):
    try:
        if string[i] == ".":
            string= string[:i]+string[i+1:]
    except:
        IndexError

結果是1234

當然,唯一真正的變化是,通過在循環周圍添加 try/except,我們將自己從 IndexError 中解救出來,一旦我們嘗試訪問字符串中現在超出范圍的元素,通常會出現這種情況

一旦發生這種情況,異常就會被捕獲,我們只需使用完成的字符串退出循環

你可以使用re模塊:

import re
string = "1.2.3.4"
string = re.sub('\.','',string)
print(string)

如果我理解正確,您想通過其索引修改字符串,同時它的長度不斷變化。

那是相當危險的。

你遇到的問題是由range(len(string))引起的。看,一旦range固定,它就不會改變。在循環中, string改變,它變得更短,這就是你超出范圍的原因錯誤。

因此,您要做的是在循環時跟蹤string ,並使用if-else查找 '.',這是一個示例:

string = '1.2.3.4'
i = 0
while i < len(string):
    if string[i] == '.':
        string = string[:i] + string[i+1:]
    else:
        i += 1

不過,有很多方法可以處理你的字符串,不要使用這個,這不好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM