[英]Changing one character in a string
Python中替換字符串中字符的最簡單方法是什么?
例如:
text = "abcdefg";
text[1] = "Z";
^
不要修改字符串。
與他們一起工作; 僅在需要時將它們轉換為字符串。
>>> s = list("Hello zorld")
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd']
>>> s[6] = 'W'
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> "".join(s)
'Hello World'
Python 字符串是不可變的(即它們不能被修改)。 這有很多原因。 使用列表直到您別無選擇,然后才將它們轉換為字符串。
有三種方式。 對於尋求速度的人,我推薦“方法 2”
方法一
由這個答案給出
text = 'abcdefg'
new = list(text)
new[6] = 'W'
''.join(new)
與“方法 2”相比,這相當慢
timeit.timeit("text = 'abcdefg'; s = list(text); s[6] = 'W'; ''.join(s)", number=1000000)
1.0411581993103027
方法 2(快速方法)
由這個答案給出
text = 'abcdefg'
text = text[:1] + 'Z' + text[2:]
哪個更快:
timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000)
0.34651994705200195
方法三:
字節數組:
timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
1.0387420654296875
new = text[:1] + 'Z' + text[2:]
Python 字符串是不可變的,您可以通過復制來更改它們。
做你想做的最簡單的方法可能是:
text = "Z" + text[1:]
text[1:]
返回text
從位置 1 到結尾的字符串,位置從 0 開始計數,因此 '1' 是第二個字符。
編輯:您可以對字符串的任何部分使用相同的字符串切片技術
text = text[:1] + "Z" + text[2:]
或者,如果字母只出現一次,您可以使用下面建議的搜索和替換技術
從 python 2.6 和 python 3 開始,您可以使用可變的字節數組(與字符串不同,可以按元素進行更改):
s = "abcdefg"
b_s = bytearray(s)
b_s[1] = "Z"
s = str(b_s)
print s
aZcdefg
編輯:將 str 更改為 s
edit2:正如評論中提到的兩位煉金術士,此代碼不適用於 unicode。
就像其他人所說的那樣,通常 Python 字符串應該是不可變的。
但是,如果您使用 CPython(python.org 上的實現),則可以使用 ctypes 來修改內存中的字符串結構。
這是我使用該技術清除字符串的示例。
為了完整起見,我提到了這一點,這應該是您的最后手段,因為它是駭人聽聞的。
這段代碼不是我的。 我不記得網站表格在哪里,我拿了它。 有趣的是,您可以使用它用一個或多個字符替換一個或多個字符。 雖然這個回復很晚,但像我這樣的新手(任何時候)可能會覺得它很有用。
mytext = 'Hello Zorld'
mytext = mytext.replace('Z', 'W')
print mytext,
字符串在 Python 中是不可變的,這意味着您不能更改現有字符串。 但是如果你想改變其中的任何字符,你可以創建一個新的字符串,如下所示,
def replace(s, position, character):
return s[:position] + character + s[position+1:]
替換('國王',1,'o')
// 結果:孔
注意:如果你給的位置值大於字符串的長度,它會在末尾追加字符。
替換('狗',10,'s')
// 結果:狗
實際上,使用字符串,您可以執行以下操作:
oldStr = 'Hello World!'
newStr = ''
for i in oldStr:
if 'a' < i < 'z':
newStr += chr(ord(i)-32)
else:
newStr += i
print(newStr)
'HELLO WORLD!'
基本上,我將“添加”+“字符串”組合成一個新字符串:)。
我喜歡 f 弦:
text = f'{text[:1]}Z{text[2:]}'
在我的機器中,此方法比使用 + 連接字符串的“快速方法”快 10%:
>>> timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000)
1.1691178000000093
>>> timeit.timeit("text = 'abcdefg'; text = f'{text[:1]}Z{text[2:]}'", number =1000000)
0.9047831999999971
>>>
如果你的世界是 100% ascii/utf-8
(很多用例都適合那個盒子):
b = bytearray(s, 'utf-8')
# process - e.g., lowercasing:
# b[0] = b[i+1] - 32
s = str(b, 'utf-8')
蟒蛇 3.7.3
我想添加另一種更改字符串中字符的方法。
>>> text = '~~~~~~~~~~~'
>>> text = text[:1] + (text[1:].replace(text[0], '+', 1))
'~+~~~~~~~~~'
與將字符串轉換為列表並替換第 i 個值然后再次加入相比,它有多快?。
列表方法
>>> timeit.timeit("text = '~~~~~~~~~~~'; s = list(text); s[1] = '+'; ''.join(s)", number=1000000)
0.8268570480013295
我的解決方案
>>> timeit.timeit("text = '~~~~~~~~~~~'; text=text[:1] + (text[1:].replace(text[0], '+', 1))", number=1000000)
0.588400217000526
在單行 if 語句中結合查找和替換方法的解決方案可能是:
```python
my_var = "stackoverflaw"
my_new_var = my_var.replace('a', 'o', 1) if my_var.find('s') != -1 else my_var
print(f"my_var = {my_var}") # my_var = stackoverflaw
print(f"my_new_var = {my_new_var}") # my_new_var = stackoverflow
```
替換字符串<\/strong>中的字符<\/strong>
您可以使用以下任何一種方法:
方法一<\/strong>
一般來說,
string = f'{string[:index]}{replacing_character}{string[index+1:]}'
嘗試這個 :
old_string = "mba"
string_list = list(old_string)
string_list[2] = "e"
//Replace 3rd element
new_string = "".join(string_list)
print(new_string)
一種非常簡單的方法是:
word = "Heloo World!"
word = word.replace(word[3], "l", 1)
print word
輸出:
Hello World!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.