如何反转字符串的“组”(非列表)? 例如,我想将“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)
感谢您的任何意见和建议。
答案 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)])
只需一步完成选择和反转。