2014-09-21 66 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