在Python中反转字符串的“组”

时间:2013-07-31 19:22:59

标签: python string reverse

如何反转字符串的“组”(非列表)? 例如,我想将“123456789”转换为“321654987”,因为“group”大小等于3。

以下是我的代码,但结果是打印空字符串:

string = "12345678901234567890"
new_string = ""
for i in range(0, len(string), 5):
    new_string = new_string + string[i:i+5:-1]
print (new_string)

感谢您的任何意见和建议。

3 个答案:

答案 0 :(得分:2)

使用否定步骤时,也要交换起始值和结束值:

new_string += string[i + 4:i - 1 if i else None:-1]

请注意,最终值被排除在外,None应该用于包含第一个字符(-1将再次从末尾切片,因此{{1}将是空的。)

演示:

string[4:-1:-1]

然而,首先切片然后反转可能会更容易,并且可以避免这种切片的麻烦:

>>> string = "12345678901234567890"
>>> new_string = ""
>>> for i in range(0, len(string), 5):
...     new_string = new_string + string[i + 4:i - 1 if i else None:-1]
... 
>>> new_string
'54321098765432109876'

答案 1 :(得分:1)

对于你的问题,简单的一个衬垫就像是。

>>> from itertools import chain
>>> testString = "123456789"
>>> group = 3
>>> "".join(chain.from_iterable([reversed(elem) for elem in zip(*[iter(testString)]*group)]))
'321654987'

另一个例子 - >

>>> testString = "12345678901234567890"
>>> group = 5
>>> "".join(chain.from_iterable([reversed(elem) for elem in zip(*[iter(testString)]*group)]))
'54321098765432109876'

答案 2 :(得分:1)

这可以在一行中完成:

newline = ''.join([string[i:i+n:1][::-1] for i in range(0, len(string), n)])

其中n是“组”的大小。在你的情况下,它将是3.解释如下:

i in range(0, len(string), n)负责按三次计算

string[i+i+n:1]负责获取每个块

[::-1]将反转每个块

''.join()将每个现在反转的块连接回一个字符串。

另一种选择是:

''.join([string[i+n-1:i-1 if i else None:-1] for i in range(0, len(string), n)])

只需一步完成选择和反转。