嗨我想编写一个函数来交换字符串中的2个字符。例如,如果输入交换('12345',2,3),则返回结果应为'13245' 我在下面写了函数,但是我收到了错误消息msg说“'int'对象不可订阅”,为什么会这样?
def swap(x,a,b):
tempa = x[a]
tempb = x[b]
i=0
listx = list(x)
while i<len(listx):
if i==a:
listx[a] = tempb
elif i==b:
listx[b] = tempa
i=i+1
return listx
答案 0 :(得分:1)
您也可以通过以下方式执行此操作:
In [1]: def swap(some_character, a, b):
....: some_list = list(some_character)
....: some_list[a-1], some_list[b-1] = some_list[b-1], some_list[a-1] # subtracted -1 to refer to their actual indexes
....: return ''.join(some_list) # prepare new string
....:
In [2]: swap('12345', 2,3)
Out[2]: '13245'
In [3]: swap('abcdefg', 3,5)
Out[3]: 'abedcfg'
答案 1 :(得分:0)
不确定你是否在问为什么你的代码不起作用,或者你想找到一个更好的交换函数,但无论如何,这是一个更好的交换函数:
def swap(s, a, b):
return s[:a-1] + s[b-1] + s[a:b-1] + s[a-1] + s[b:]
这个想法是每个字符串都有两个交换字符,它们将字符串分成开始,中间和结束子字符串。此函数只是连接交换的字母和子字符串。
您提供的代码(和Rahul Gupta的代码)运行没有错误。你的函数和答案中的两个函数之间的区别在于我们的函数返回一个字符串并使用从0开始的索引,而你的函数返回一个列表并使用从1开始的索引。