python字符串拼接

作者: 陆_志东 | 来源:发表于2018-06-20 23:28 被阅读23次

    使用join拼接字符串

    test = ["is","human","not","human"]
    print(" ".join(test))
    >>>is human not human
    print(",".join(test))
    >>>is,human,not,human
    print("".join(test))
    >>>ishumannothuman
    

    使用+号进行拼接

    a = "is human"
    b = "not human"
    print(a+" "+b)
    >>>is human not human
    

    使用格式化操作

    a = "is human"
    b = "not human"
    print("%s %s" % (a,b))
    >>>is human not human
    print("{} {}".format(a,b))
    >>>is human not human
    

    但是在拼接字符串的时候最好不要使用+=,因为内存拷贝和垃圾收集产生的影响,会导致效率变低,比如

    s = ""
    a = ["1","2","3","4"]
    for i in a:
        s += i
    

    上面的这种操作要比join 要慢上许多.
    最好的方法是先收集所有要连接的部分,最后再一次将他们连接起来.比如

    a = ["num:",1,2,3]
    print("".join(str(i) for i in a))  # 不能直接join,因为python是强类型语言
    >>>num:123
    

    当字符串的拼接和I/O操作混合的时候需要做具体的分析,比如下面的两种方式

    # version1
    f.write(a+b)
    
    # version2
    f.write(a)
    f.write(b)
    

    当a,b两个字符串都很小的时候,那么第一个版本的代码能带来更好的性能.因为一次I/O操作的开销很高.
    如果两个字符串都很大,那么第二个版本能带来更好的性能,因为这里避免了创建大的临时结果,也没有
    对大内存块进行拷贝.所以使用哪一种情况需要做分析.

    如果我们编写的代码要从许多短字符串中构建输出,则应该考虑编写生成器函数

    def sample():
        i = 0
        while i < 10000:
            yield "happy "
            i += 1
    text = " ".join(sample())
    

    也可以将生成器和I/O操作智能化地结合起来

    def combine(source,maxsize):
        parts = []
        size = 0
        for part in source:
            parts.append(part)
            size += len(part)
            if size > maxsize:
                yield " ".join(parts)
                parts = []
                size = 0
        yield " ".join(parts)
    
    
    with open(filename,"w") as f:
        for part in combine(sample,1000):
            f.write(part)
    

    相关文章

      网友评论

        本文标题:python字符串拼接

        本文链接:https://www.haomeiwen.com/subject/ltjfyftx.html