我想遍歷一個字串,當它找到一個大寫字母時,我想用#替換它。像這樣:
string = "hOw Are yOu?"
for x in string:
if x.isupper():
string.replace(x, "#")
print(string)
else:
print(string)
但是,它沒有按預期作業,而是輸出相同的字串。請告訴我是否有解決此問題的方法,或者您是否建議另一種方法。
uj5u.com熱心網友回復:
將串列推導與連接一起使用:
In [4]: ''.join([i if not i.isupper() else '#' for i in string])
Out[4]: 'h#w #re y#u?'
uj5u.com熱心網友回復:
您只想將結果再次放入字串中,請參見下文
string = "hOw Are yOu?"
for x in string:
if x.isupper():
string = string.replace(x, "#")
print(string)
else:
print(string)
uj5u.com熱心網友回復:
字串在 Python 中是不可變的。string.replace(x, "#")因此必須string = string.replace(x, "#")對字串產生影響。
請注意,當前您的代碼具有二次復雜度,因為每個替換操作都必須在線性時間內回圈整個字串。一種更有效的方法是自己執行替換,因為您已經在遍歷每個字符:
string = "".join(["#" if c.isupper() else c for c in "hOw Are yOu?"])
為此使用非常簡單的RegEx會更簡潔(并且可能更快) :
import re
string = re.sub("[A-Z]", "#", "hOw Are yOu?")
但是,對于非 ASCII 字母,這將失敗;你必須使用unicode 屬性 ®ex那里。
uj5u.com熱心網友回復:
這應該可以解決問題!
string = "hOw Are yOu?"
for x in string:
if x.isupper():
string = string.replace(x, "#")
else:
pass
print(string)
我也是新手!但從我學到的:在執行回圈或 if 陳述句時,你想指定你正在更改的值,就像我在第 4 行所做的那樣: string = string.replace(x,'#') 如果不是,更改將不會生效!
Example:
my_list = [1,2,3,4]
for x in my_list:
my_list[x-1] = x 1
print(my_list)
這是一個糟糕的示例編碼,但它舉例說明了這個概念。如果你不解決變數,它不會對它有任何影響!
希望這可以幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/490979.html
