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