我想写一个程序,输入一个字符串,然后交换字符串中每一对相邻的字符。例如,如果输入的是'France',输出应该是'rFnaec'。
我看到这里的大多数答案都没有考虑到字符串长度不是偶数的情况,所以我的解决方案是这样的。
s = "France"
if len(s)%2==0:
l =len(s)
else:
l=len(s)-1
"".join([s[i+1] + s[i] for i in range(0,l,2)]) +s[l:]
该解决方案将适用于 s="Franc"
我相信输出应该是 'rFnac'
重组答案 Andrej的答案,以解释不均匀的内层列表,使用 zip_longest
from itertools import zip_longest
s = 'Franc'
print( ''.join(''.join(t[::-1]) for t in zip_longest(s[::2], s[1::2], fillvalue='')))
肮脏的行话。我们要建立两个迭代表 一个是偶数索引,一个是奇数索引 然后用zipzip_longest在它们上面迭代。
一个简单易懂的解决方案,如果不那么 "pythonic"。
item = list("France")
for i in range(len(item)):
if i % 2 == 0:
# assumes the string has an even length
tmp = item[i]
item[i] = item[i + 1]
item[i + 1] = tmp
item = "".join(item)
print(item) # result: rFnaec
你可以试试这个。
>>> s = 'France'
>>> ''.join([ s[x:x+2][::-1] for x in range(0, len(s), 2) ])
'rFnaec'
你可以用 zip()
内建函数(如果字符串长度为偶数,则使用 itertools.zip_longest
如@疯狂的回答)。)
s = 'France'
print( ''.join(''.join(t[::-1]) for t in zip(s[::2], s[1::2])) )
打印:
rFnaec
这将使工作
a = 'France'
"".join(["".join([v, a[i*2]]) for i, v in enumerate(a[1::2])]+([a[-1]] if len(a) % 2 !=0 else []))
产量
'rFnaec'