资讯专栏INFORMATION COLUMN

面试python岗位,提问:连接字符串用join还是+,怎么回答?

molyzzx / 668人阅读

摘要:上面的程序有如下的输出可以看到,的性能明显好于。而在连接字符串的时候,会先计算需要多大的内存存放结果,然后一次性申请所需内存并将字符串复制过去,这是为什么的性能优于的原因。所以在连接字符串数组的时候,我们应考虑优先使用。


本篇要讲的是,连接字符串的时候可以用join也可以用+,但这两者有没有区别呢?
关注公众号:「Python专栏」,后台回复「腾讯架构资源1」,获取由腾讯架构师整理的大数据学习资源包全套!!!

我们先来看一下用join和+连接字符串的例子

str1 = " ".join(["hello", "world"])
str2 = "hello " + "world"

print(str1)  # 输出 “hello world"
print(str2)  # 输出 “hello world"

两者的结果是一样,那么考虑这样一个问题,这两者在性能上有区别吗?
我们来做个实验,比较下join和+的性能

import timeit

def test1(strlist):
    return "".join(strlist)

def test2(strlist):
    result = ""
    for v in strlist:
        result = result+v
    return result

if __name__ == "__main__":
    strlist = ["a very very very very very very very long string" for n in range(100000)]
    timer1 = timeit.Timer("test1(strlist)", "from __main__ import strlist, test1")
    timer2 = timeit.Timer("test2(strlist)", "from __main__ import strlist, test2")
    time1 = timer1.timeit(number=100)
    time2 = timer2.timeit(number=100)
    print("join: %f, plus: %f" % (time1, time2))

那么这里我们不对timeit模块做过多解释,你们可以理解为是一个对代码效率进行检测运行耗时的模块。下次我们多带带起一篇来说这个timeit。

上面的程序有如下的输出

join: 0.116944, plus: 0.394379

可以看到,join的性能明显好于+。这是为什么呢?

原因是这样的,字符串是不可变对象,当用操作符+连接字符串的时候,每执行一次+都会申请一块新的内存,然后复制上一个+操作的结果和本次操作的右操作符到这块内存空间,因此用+连接字符串的时候会涉及好几次内存申请和复制。

而join在连接字符串的时候,会先计算需要多大的内存存放结果,然后一次性申请所需内存并将字符串复制过去,这是为什么join的性能优于+的原因。

所以在连接字符串数组的时候,我们应考虑优先使用join。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43345.html

相关文章

  • 从零转行数据分析的亲身经历

    摘要:我的转行经历博主从开公众号起前个月开始接触语言,然后接触到了数据方面的技术,包括爬虫,数据分析,数据挖掘,机器学习等,一直到现在仍然在坚持自学,我相信只要坚持结果总不会太差。对于数据分析而言,机器学习和爬虫等并不是必须,但是加分项。 作者:xiaoyu 微信公众号:Python数据科学 知乎:python数据分析师 showImg(https://segmentfault.com/i...

    Rocture 评论0 收藏0
  • 细读应聘阿里全流程,我是如何拿到阿里offer!

    摘要:应聘阿里是一个相对较长的流程,涉及岗位选择简历投递简历评估技术面试面试背景调查入职材料准备等环节。关于学历和专业的要求目前,阿里的正式岗位对学历的要求基本都是本科及以上,这个要求并不高,出发点是避免因学历限制而错过优秀的人才。 应聘阿里是一个相对较长的流程,涉及岗位选择、简历投递、简历评估、技术面试、HR面试、背景调查、入职材料准备等环节。其中,关于技术面试,网上有很多优秀的攻略,但普...

    AlanKeene 评论0 收藏0
  • 细读应聘阿里全流程,我是如何拿到阿里offer!

    摘要:应聘阿里是一个相对较长的流程,涉及岗位选择简历投递简历评估技术面试面试背景调查入职材料准备等环节。关于学历和专业的要求目前,阿里的正式岗位对学历的要求基本都是本科及以上,这个要求并不高,出发点是避免因学历限制而错过优秀的人才。 应聘阿里是一个相对较长的流程,涉及岗位选择、简历投递、简历评估、技术面试、HR面试、背景调查、入职材料准备等环节。其中,关于技术面试,网上有很多优秀的攻略,但普...

    jay_tian 评论0 收藏0
  • 技术面试老是有劲使不出,该怎么办?

    摘要:老王工作五六年了,今年刚从一家不小的公司出来,公司效益不好,年底裁员了,不幸老王在年前的最后一次裁员名单中中奖了。小黄心想,昨天复习了面试宝典里的数据库索引,老师说这个是要点,面试官怎么不按常理出牌呢。 又到了一年金三银四,回想到很多年前我刚参加工作时的面试经历,那时都是呆呆地等着面试官问问题,被问到一些自己并不熟悉的问题时要不就是思考半天也切不中要点,要不就只能无奈地回答并不清楚了。...

    史占广 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<