交换字符串中的字符

时间:2018-11-19 07:06:29

标签: python python-3.x string

我需要将15个数字的数字字符串中的中间字符与字符串的最后一个数字交换。

所以我得到这个:

def string(str):  
      return str[-1:] + str[1:-1] + str[:1]  

print(string('abcd'))  
print(string('12345')) 

结果:

dbca
52341

但是如何使它成为初始输入字符串012345678912345,

将7与字符串5中的最后一个字符交换?

4 个答案:

答案 0 :(得分:1)

考虑

def last_to_mid(s):
    if len(s) == 1:
        return s

    if len(s)%2 == 0:            
        raise ValueError('expected string of odd length')

    idx = len(s)//2
    return f'{s[:idx]}{s[-1]}{s[idx+1:-1]}{s[idx]}'

操作如下:

>>> last_to_mid('021')
'012'
>>> last_to_mid('0123x4567')
'01237456x'
>>> last_to_mid('1')
'1'

假设您拥有f-strings的Python 3.6或更高版本。

答案 1 :(得分:1)

您可以为此提供一个功能

    In [178]: def swap_index_values(my_string):
     ...:     l = list(my_string)
     ...:     middleIndex = (len(l) - 1)/2 
     ...:     middle_val = l[middleIndex]
     ...:     l[middleIndex] = l[-1]
     ...:     l[-1] = middle_val
     ...:     return ''.join(l)
     ...: 

    In [179]: 

    In [179]: a
    Out[179]: '012345678912345'

    In [180]: swap_index_values(a)
    Out[180]: '012345658912347'

上面,您可以看到中间值和最后一个值已交换。

答案 2 :(得分:0)

在这种非常特殊的情况下(始终是长度为15的字符串的中间和最后一个字符),您的初始方法可以扩展为:

text[0:7]+text[-1]+text[8:-1]+text[7]

也请尽量避免使用诸如str之类的变量名,因为它们会掩盖同名函数。

答案 3 :(得分:0)

s1='1243125'
s2=s1[:len(s1)//2] + s1[-1] + s1[len(s1)//2 + 1:]
print(s2)

'1245125'

相关问题