将字符串拆分为一个列表,其中N个字符的部分顺序相反

时间:2017-10-30 10:40:45

标签: python string

我有一个固定长度的字符串。

>>> s = "000000000001048700000010768"

我需要将此字符串拆分为相反顺序的5个字符的部分(从最后一个字符开始)。 输出应为:

  <00> 00 00000 00001 04870 00000 10768

我找到了textwrap模块,它执行拆分,但输出略有不同。

>>> import textwrap
>>> print ' '.join(textwrap.wrap(s, 5))
00000 00000 01048 70000 00107 68

是否有一个简单的解决方案可以解决这个问题?也许使用s.format()

3 个答案:

答案 0 :(得分:2)

在拆分之前反转字符串。

parts = textwrap.wrap(s[::-1], 5)

然后您可以撤消列表,返回原始订单。

print " ".join(parts[::-1])

或简而言之:

print " ".join(textwrap.wrap(s[::-1], 5)[::-1])

答案 1 :(得分:0)

没有textwrap的解决方案并将字符串反转两次:

print ' '.join(s[max(i-5, 0):i] for i in reversed(range(len(s), 0, -5)))

答案 2 :(得分:0)

一种正则表达式方式,既然您确认自己并不想分割,只需添加空格。

>>> import re
>>> re.sub('(.{5})(?=.)', r'\1 ', s[::-1])[::-1]
'00 00000 00001 04870 00000 10768'

这抓住了五个字符后跟一些东西(我希望\z可以工作)并用自己和空格替换它们。事先反转输入字符串,然后反转输出字符串,以便进行从右到左的分组。