如何在python中交换相邻的字符 [关闭]。

问题描述 投票:0回答:1

我想写一个程序,输入一个字符串,然后交换字符串中每一对相邻的字符。例如,如果输入的是'France',输出应该是'rFnaec'。

python python-3.x string swap
1个回答
1
投票

我看到这里的大多数答案都没有考虑到字符串长度不是偶数的情况,所以我的解决方案是这样的。

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在它们上面迭代。


0
投票

一个简单易懂的解决方案,如果不那么 "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

0
投票

你可以试试这个。

   >>> s = 'France'
   >>> ''.join([ s[x:x+2][::-1] for x in range(0, len(s), 2) ])
   'rFnaec'

0
投票

你可以用 zip() 内建函数(如果字符串长度为偶数,则使用 itertools.zip_longest 如@疯狂的回答)。)

s = 'France'

print( ''.join(''.join(t[::-1]) for t in zip(s[::2], s[1::2])) )

打印:

rFnaec

0
投票

这将使工作

   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'
© www.soinside.com 2019 - 2024. All rights reserved.