首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将两个不同字符串中的字符交替使用以形成字符串

如何将两个不同字符串中的字符交替使用以形成字符串
EN

Stack Overflow用户
提问于 2022-05-23 12:14:53
回答 6查看 1K关注 0票数 1

Method1:

代码语言:javascript
复制
    abc = 'Hello World'
    qwe = 'abc 123'
    
    #intersperse words
    def intersperse(abc,qwe):
        list = []
        for i in abc:
            list.append(i)
            for j in qwe:
                list.append(j)
        return ''.join(list)
    
    intersperse(abc,qwe)

Output: "Habc 123eabc 123labc 123labc 123oabc 123 abc 123Wabc 123oabc 123rabc 123labc 123dabc 123"

方法2:

代码语言:javascript
复制
    #intersperse words
    def intersperse(abc,qwe):
        abcs = abc.split()
        qwes = qwe.split()
        result = sum(zip(abcs, qwes+[0]), ())[:-1]
        return ''.join(result)
    
    intersperse(abc,qwe)

Output: "HelloabcWorld" (<--somehow the 123 is missing)

这两种方法都试过了,但没能成功。我希望输出也考虑到字符之间的空白。

期望输出:"Haeblcl o1 2W3 o1“

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2022-05-23 12:19:57

在一个简单的清单理解中加入一个简单的for-loop如何缩短这个问题呢?

代码语言:javascript
复制
def intersperse(abc,qwe):
    min_len = min(len(abc), len(qwe))
    return "".join([abc[i] + qwe[i] for i in range(min_len)]) + abc[min_len:] + qwe[min_len:]

说明:确定两个字符串的最小长度--直到该长度,交替添加两个字符串的字符。最后,添加较长字符串的剩余字符,利用切片。

输出结果与预期的一样:intersperse("Hello World", "abc 123")生成'Haeblcl o1 2W3orld'

票数 4
EN

Stack Overflow用户

发布于 2022-05-23 12:37:15

这很容易用发电机的功能来完成。

代码语言:javascript
复制
abc = 'Hello World'
qwe = 'abc 123'

def intersperce(a, b):
    if len(a) > len(b):
        filler = a[len(b):]
    else:
        filler = b[len(a):]

    def generator():
        for char_a, char_b in zip(a, b):
            yield char_a
            yield char_b
        for x in filler:
            yield x

    return "".join(generator())


assert intersperce(abc, qwe) == "Haeblcl o1 2W3orld"

yield返回值并挂起执行。只要在(a,b)上迭代一个zip,就可以轻松地一次生成一个字符。那就得用剩下的字符来填充。

你可以参考正式文件

编辑:

我不知道zip_longest的事,谢谢你。这里有一个较短的版本,不需要填充。

代码语言:javascript
复制
from itertools import zip_longest

abc = 'Hello World'
qwe = 'abc 123'

def intersperce(a, b):

    def generator():
        for char_a, char_b in zip_longest(a, b, fillvalue=""):
            yield char_a
            yield char_b

    return "".join(generator())


assert intersperce(abc, qwe) == "Haeblcl o1 2W3orld"

这就引出了密码高尔夫版本。

代码语言:javascript
复制
from itertools import zip_longest

abc = 'Hello World'
qwe = 'abc 123'


def intersperce(a, b):
    return "".join(i + j for i, j in zip_longest(a, b, fillvalue=""))


assert intersperce(abc, qwe) == "Haeblcl o1 2W3orld"
票数 2
EN

Stack Overflow用户

发布于 2022-05-23 12:20:47

您可以使用迭代工具zip_longest和联接:

代码语言:javascript
复制
from itertools import zip_longest
abc = 'Hello World'
qwe = 'abc 123'
''.join(i+j for i, j in zip_longest(abc, qwe, fillvalue=''))

输出:

代码语言:javascript
复制
'Haeblcl o1 2W3orld'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72348363

复制
相关文章

相似问题

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