2012-02-25 87 views
0

夥計,python字符串就地修改

假設我想在Python中將'abc'更改爲'bac'。什麼是最好的方法來做到這一點?

我想到的是以下

tmp = list('abc') 
tmp[0],tmp[1] = tmp[1],tmp[0] 
result = ''.join(tmp) 
+0

我希望你不是活得只是想'str.replace'? – 2012-02-25 03:36:23

回答

2

你從來沒有「到位」編輯字符串,字符串是不可變的。

你可以用列表來做,但這是浪費代碼和內存。

爲什麼不只是做:

x = 'abc' 
result = x[1] + x[0] + x[2:] 

或(個人收藏)

import re 
re.sub('(.)(.)', r'\2\1','abc') 

這可能是欺騙,但如果你真的想編輯到位,並使用2.6或較舊,然後使用MutableString(這在3.0中已棄用)。

from UserString import MutableString 
x = MutableString('abc') 
x[1], x[0] = x[0], x[1] 
>>>>'bac' 

有了這樣說,解決方案通常不如「ABC」 =「脊樑」你可能想給我們你需要如何分割你的字符串更多的細節一樣簡單。它總是隻交換第一位數字?

+0

沒有。我只是想在原地改變字符串。在這種情況下,將它分解成char列表是最好的選擇? – nos 2012-02-25 02:33:51

+0

它本質上*是一個字符串列表。你不需要將它轉換爲列表。 – Nix 2012-02-25 02:38:18

+4

@nos - Python不是C,你不能直接訪問字符串來就地修改它。無論您認爲自己在使用列表和切片等方式,您都是*不*就地編輯字符串。那是什麼意思?不要擔心更新的「就地」性,只需像在Nix的第一個示例中那樣創建一個新字符串,然後轉到程序的其他更重要的部分。 – PaulMcG 2012-02-25 03:07:13

1

你不能修改字符串,它們是不可變的。如果要修改的地方的列表,你可以在你的例子不喜歡它,或者如果你想更換可以用切片訪問的元素,你可以使用切片分配:

tmp = list('abc') 
tmp[0:2] = tmp[1::-1] # replace tmp[0:2] with tmp[1::-1], which is ['b', 'a'] 
result = ''.join(tmp)