Moi*_*dri 0 python string slice python-2.7 python-3.x
我的字符串如下:
x = 'abcdefghi'
Run Code Online (Sandbox Code Playgroud)
我想在3的子集中反转它,以便我的输出是:
x = 'cbafedihg'
Run Code Online (Sandbox Code Playgroud)
即第0个索引与第2个索引交换,第3个索引与第5个交换,依此类推.
下面是我的代码基于转换string为list和交换列表中的元素:
string_list = list(x)
for i in range(len(string_list)/3):
string_list[i*3], string_list[i*3+2] = string_list[i*3+2], string_list[i*3]
''.join(string_list)
# Output: 'cbafedihg'
Run Code Online (Sandbox Code Playgroud)
我想知道什么是实现它的最有效和最pythonic的方式.
注意:len(x)%3始终为0.
上面的代码可以使用string slicing和编写list comprehension:
# Here x[i*3:i*3+3][::-1] will reverse the substring of 3 chars
>>> ''.join([x[i*3:i*3+3][::-1] for i in range(len(x)/3)])
'cbafedihg'
Run Code Online (Sandbox Code Playgroud)
根据Delgan的评论,可以使用stepas 3 进一步简化range为:
>>> ''.join(x[i:i+3][::-1] for i in range(0, len(x), 3))
'cbafedihg'
Run Code Online (Sandbox Code Playgroud)