我需要反转一个交错的字符串,意味着我有2对,这应该搞砸了这样:
>>> interleaved = "123456"
逆转
>>> print interleaved[::-1]
654321
但我真正想要的是
563412
是否有字符串切片操作?
答案 0 :(得分:7)
对于偶数长度字符串,应该这样做:
>>> s = "123456"
>>> it = reversed(s)
>>> ''.join(next(it) + x for x in it)
'563412'
对于奇数长度的字符串,您需要单独添加第一个字符:
>>> s = "7123456"
>>> it = reversed(s)
>>> (s[0] if len(s)%2 else '') + ''.join(next(it) + x for x in it)
'7563412'
使用切片和zip
:
>>> s = "7123456"
>>> (s[0] if len(s)%2 else '') + ''.join(x+y for x, y in zip(s[-2::-2], s[::-2]))
'7563412'
答案 1 :(得分:4)
据我所知,最短的方法是使用正则表达式:
import re
''.join(re.findall('..?', '123456', flags=re.S)[::-1])
这也适用于奇数长度的字符串,而不必为它们实现单独的逻辑。
答案 2 :(得分:3)
你可以将几个想法带到split a string in pieces,然后反转每一个部分并重新组合(加入)相反的列表。
E.g。 (以不太可读的方式使用satomacoto答案......)
''.join([a[::-1][i:i+2][::-1] for i in range(0, len(a), 2)])
或(使用F.J.回答)
''.join(map(''.join, zip(*[iter(a)]*2))[::-1])
等等。 (成为a
你的字符串)。