簡體   English   中英

如何在python中使用循環刪除字符串中的空格?

[英]How do I remove spaces in a string using a loop in python?

def onlyLetters(s):
    for i in range(len(s)):
        if s[i] == " ":
           s = s[:i] + s[i+1:]
           return s
        return s

為什么我的上面的循環不起作用? 看起來它只做了一次。

例如,如果我有字符串“ 你好,你好嗎 ”,它會返回“ Hellohow are you ”。 我希望它再次檢查字符串並刪除另一個空格,並繼續這樣做,直到沒有剩余空格。 我該如何修復此代碼?

您的代碼在更換第一個空格后停止,因為您告訴它。 你在循環中return s ,當達到它時,循環的其余部分將被放棄,因為函數退出。 你應該完全刪除該行。

但是,還有另外一個問題,與您的索引方式有關。 當您對索引的range(len(s))進行迭代時,您將轉到原始字符串的長度。 但是,如果刪除了一些空格,那么最后幾個索引將不再有效(因為修改后的字符串更短)。 如果一行中有兩個空格(如"foo bar" ),則會出現另一個類似的問題。 您的代碼只能替換第一個代碼。 刪除第一個空格后,第二個空格將向上移動並處於相同的索引處,但循環將移動到下一個索引而不會看到它。

您可以通過兩種不同的方式解決此問題。 最簡單的解決方法是以相反的順序循環索引。 向末尾移除空格不會更改較早空格的索引,並且即使字符串收縮,數字最小的索引也始終有效。

def onlyLetters(s):
    for i in range(len(s)-1, -1, -1): # loop in reverse order
        if s[i] == " ":
            s = s[:i] + s[i+1:]
    return s

另一種方法是放棄索引的for循環,並在手動更新索引變量時使用while循環:

def onlyLetters(s):
    i = 0
    while i < len(s):
        if s[i] == " ":
            s = s[:i] + s[i+1:]
        else:
            i += 1
    return s

只需對字符串使用python replace()方法。

s.replace(" ","")

這有點難以辨別,因為你的例子中的縮進很難理解。 但它看起來像你遇到並刪除第一個空間后,你回來了。 所以你只有機會在返回之前刪除一個空格。

一旦退出for循環,請嘗試僅返回s。

你可以做s.replace(" ", "") 這將占用你的所有空格( " " )並替換它( "" ),有效地刪除空格。

您在第一次出現","后返回該函數,這意味着它完全退出循環和函數。 這就是為什么它只適用於第一個逗號。

如果您只想使用自己的代碼,請嘗試運行:

def onlyLetters(s):
    for i in range(len(s)):
        if s[i] == " ":
           s = s[:i] + s[i+1:]
    return s

或者你可以使用更好的:

def onlyLetters(s):
    return s.replace(" ","")

如果要刪除所有空格,請使用str.replace():

sentence = ' Freeman was here'
sentence.replace(" ", "")
>>> 'Freemanwashere'

如果要刪除前導和結束空格,請使用str.strip():

sentence = ' Freeman was here'
sentence.strip()
>>> 'Freeman was here'

如果要刪除重復的空格,請使用str.split():

sentence = ' Freeman was here'
" ".join(sentence.split())
>>> 'Freemanwashere'

如果您還想刪除unicode中存在的所有其他奇怪的空白字符,可以將re.sub與re.UNICODE爭論一起使用:

text = re.sub(r"\s+", "", text, flags=re.UNICODE)

或類似的東西,它處理你沒想到的任何空白字符😉:

>>> import re
>>> re.sub(r'\s+', '', 'Freeman was here')
'Freemanwashere'

如果你不想使用replace()join()等任何東西,你可以這樣做:

def filter(input):
    for i in input:
        yield " " if i in " ,.?!;:" else i

def expand(input):
    for i in input:
        yield None if i == " " else object(), i

def uniq(input):
    last = object()
    for key, i in input:
        if key == last:
            continue
        yield key, i

def compact(input):
    for key, i in input:
        yield i

yourText = compact(uniq(expand(filter(input()))))

嘗試這個,

def onlyLetters(s):
   length=len(s)
   i=0
   while(i<length):

      if s[i] == " ":
         s = s[:i] + s[i+1:]
         length=len(s)
      else
         i+=1

   return s
def remove_spaces(text):
    text_with_out_spaces='';
    while text!='':
        next_character=text[0];
        if next_character!=' ':
            text_with_out_spaces=text_with_out_spaces +next_character;
        text=text[1:];
    return text_with_out_spaces

print remove_spaces("Hi Azzam !! ?");

輸出截圖

暫無
暫無

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

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