我需要将15个数字的数字字符串中的中间字符与字符串的最后一个数字交换。
所以我得到这个:
def string(str):
return str[-1:] + str[1:-1] + str[:1]
print(string('abcd'))
print(string('12345'))
结果:
dbca
52341
但是如何使它成为初始输入字符串012345678912345,
将7与字符串5中的最后一个字符交换?
答案 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'