2014-09-21 70 views
6

我是新來的python,我想知道如何交換字符串中的兩個字符。我知道字符串是不可變的,所以我需要找到一種方法來創建一個交換字符的新字符串。 具體來說,一個一般的方法,它接受一個字符串和兩個索引i,j並將j上的字符與j交換。交換字符串

回答

12

正如您正確指出的那樣,字符串是不可變的,不能就地修改 - 但我們可以使用交換字符創建一個新字符串。這裏有一個想法:讓我們將字符串轉換成一個列表,掉在列表中的元素,然後轉換列表回字符串:

def swap(s, i, j): 
    lst = list(s); 
    lst[i], lst[j] = lst[j], lst[i] 
    return ''.join(lst) 

另一種可能的實現是用切片和索引操作字符串:

def swap(s, i, j): 
    return ''.join((s[:i], s[j], s[i+1:j], s[i], s[j+1:])) 

無論哪種方式,它按預期工作:

swap('abcde', 1, 3) 
=> 'adcbe' 
+0

太好了,我在想的一些方式,通過列表來做到這一點。時間有效嗎?因爲我必須把它放在時間關鍵的程序中。 – Wajahat 2014-09-21 00:56:52

+0

@Wajahat這很好。我更喜歡第一個選項,因爲它創建的中間字符串較少,但像往常一樣,如果我們先嚐試對代碼進行簡要分析,然後嘗試過早地優化代碼,則會更好。 – 2014-09-21 00:59:14

+0

只需注意任何希望使用此代碼的人,第二種方式對切片和索引所做的操作在python3中的負指數下無法正常工作。我會建議使用第一種方法。 – Mason 2017-10-18 22:37:24