簡體   English   中英

如何通過Python字符串切片用stride反轉字符串

[英]How to reverse string with stride via Python String slicing

我需要反轉一個交錯的字符串,意味着我有2對,應該像這樣搞砸了:

>>> interleaved = "123456"

倒車

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

但我真正想要的是

563412

這有一個字符串切片操作?

對於偶數長度的字符串,這應該這樣做:

>>> 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'

據我所知,最短的方法是使用正則表達式:

import re
''.join(re.findall('..?', '123456', flags=re.S)[::-1])
  • 輸入:'123456'
  • 輸出:'563412'

這也適用於奇數長度的字符串,而不必為它們實現單獨的邏輯。

您可以帶幾個想法將一個字符串分成部分 ,然后反轉每個部分並重新組合(加入)列表反轉。

例如(以不太可讀的方式使用satomacoto答案......)

''.join([a[::-1][i:i+2][::-1] for i in range(0, len(a), 2)]) 

或(使用FJ答案)

''.join(map(''.join, zip(*[iter(a)]*2))[::-1])

等等。 (作為a你的字符串)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM