如何通过Python字符串切片用stride反转字符串

时间:2014-01-11 11:58:57

标签: python string slice

我需要反转一个交错的字符串,意味着我有2对,这应该搞砸了这样:

>>> interleaved = "123456"

逆转

>>> print interleaved[::-1]
654321

但我真正想要的是

563412

是否有字符串切片操作?

3 个答案:

答案 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])
  • 输入:'123456'
  • 输出:'563412'

这也适用于奇数长度的字符串,而不必为它们实现单独的逻辑。

答案 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你的字符串)。