首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3子集中字符串的反向字符

3子集中字符串的反向字符
EN

Stack Overflow用户
提问于 2016-09-14 08:17:17
回答 3查看 145关注 0票数 0

假设我的字符串是:

代码语言:javascript
复制
x = 'abcdefghi'

我想在3的子集中反转它,这样我的输出是:

代码语言:javascript
复制
x = 'cbafedihg'

即第0指数与第2指数互换,第3指数与第5指数互换,等等。

下面是基于将string转换为list并交换列表中的元素的代码:

代码语言:javascript
复制
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'

我想知道什么将是最有效和最仿生的方式来实现它。

注意:len(x)%3总是0。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-14 08:55:17

实现这一目标的另一种方法是将字符串类型转换为list,然后使用步骤as 3使用列表切片交换list的元素,并将字符串列表合并为:

代码语言:javascript
复制
>>> string_list = list(x)
>>> string_list[::3], string_list[2::3] = string_list[2::3], string_list[::3]
>>> ''.join(string_list)
'cbafedihg'
票数 0
EN

Stack Overflow用户

发布于 2016-09-14 08:17:58

以上代码可以使用string slicinglist comprehension编写,如下所示:

代码语言:javascript
复制
# 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'

基于Delgan的评论,可以进一步简化使用step as 3,range本身为:

代码语言:javascript
复制
>>> ''.join(x[i:i+3][::-1] for i in range(0, len(x), 3))
'cbafedihg'
票数 5
EN

Stack Overflow用户

发布于 2016-09-14 09:27:23

编写一个更具可读性和灵活性的函数?

代码语言:javascript
复制
def get_string(input_str, step=3):
    output = ""
    i = 0
    for _ in list(input_str):
        if i == len(input_str):
            return output
        elif i+step-1 >= len(input_str):
            output += input[len(input_str)-1:i-1:-1]
            return output
        else:
            output += input_str[i+step-1:i:-1] + input_str[i]
            i += step
    return output

这里有一个灵活的部分:

代码语言:javascript
复制
get_string("abcdefghi")
# Ouputs 'cbafedihg'
get_string("abcdefghi", 2)
# Outputs 'badcfehgi'
get_string("abcdefghi", 5)
# Outputs 'edcbaihgf'

更不用说,如果您想要添加更多的逻辑或更改逻辑,这里的更改就更容易了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39485624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档