说说Python中连接字符串用join还是+?

公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。

废话不多说,开始今天的题目:

问:说说Python中连接字符串用join还是+?

答:两者都可以用于 Python 连接字符串,我们先来个简单的例子,看看两者怎么用法?

str1 = ":".join(["公众号","程序IT圈"])
str2 = "公众号:" + "程序IT圈"
print(str1) # 公众号:程序IT圈
print(str2) # 公众号:程序IT圈

上面代码,稍微说一下join函数的用法,join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。

语法格式说明:

string.join(sequence)

string  ==>> 字符串拼接符

sequence ==>> 要拼接的对象,可为字符串、元祖、列表、字典、集合

学会了两者的基本用法,我们再来说说两者运行效率性能的比较 。

因为计算机运行速度很快,所以如果很短的字符串连接,几乎两者没什么差别,所以我们做个实验,连接一个很长的字符串,代码如下:

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(10000)]
   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, + 运行时间: %f" % (time1, time2))

运行时间结果:
   join运行时间: 0.063888, + 运行时间: 0.494203

从上面代码中,可以看出使用join要比+快很多,在大规格场景下的上万次循环,join的优势非常明显 。

为什么呢?由于Python中字符串是不可变对象,修改字符串就得将原字符串中的值复制,开辟一块新的内存,加上修改的内容后写入到新内存中,以达到“修改”字符串的效果。在使用“+”拼接字符串时,正是使用了重复性的复制、申请新内存、写入值到新内存的工作一遍遍的将字符串的值修改。而使用join()方法拼接字符串时,会先计算总共需要申请多少内存,然后一次性申请所需内存并将字符串复制过去。这样便省去了重复性的内存申请和写入,节省了时间消耗。

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

1-40、Python面试1-40题汇总

41、说说Python中的正则表达式?
42、Python如何实现斐波那契数列?
43、说说Python 中 is 和 == 的区别?
44、说说Python如何实现杨辉三角?
45、说说Python中变量的作用域?
46、Python打印九九乘法表有几种方式?
47、Python中列表常见的方法有哪些?
48、说说Python中yield的用法?
49、说说Python中元类是什么?
50、Python中几种常见的排序算法?
51、说说Python中闭包是什么?
52、read、readline和readlines的区别?
53、说说Python中with的用法?

关注小猿公众号,每天学习一道题

(0)

相关推荐

  • Python代码加速的10个最佳实用技巧

    如果有人问你 --"现在世界上增长最快的编程语言是什么?"答案很简单.那就是 Python.由于其简单的语法和丰富的库,它在世界范围内受到欢迎.现在,你几乎可以用python做任何 ...

  • C#拆分中文和数字字符串

    比如要拆分"呵呵呵90909086676喝喝999",下面当type=0返回的是中文字符串"呵呵呵,喝喝",type=1返回的是数字字符串"90909 ...

  • python2和3编码

    作用:python3.x里默认的str是(py2.x里的)unicode, bytes是(py2.x)的str, b""前缀代表的就是bytes python2.x里, b前缀没什 ...

  • R语言中连接dplyr的join系列与merge函数

    欢迎来到医科研,这里是白介素2的读书笔记,跟我一起聊临床与科研的故事, 生物医学数据挖掘,R语言,TCGA.GEO数据挖掘. 在数据分析过程中,仅仅涉及一张表格的情况是非常少见的,我们经常需要联系到其 ...

  • 为什么 Python 的 f-string 可以连接字符串与数字?

    本文出自"Python为什么"系列,归档在 Github 上:https://github.com/chinesehuazhou/python-whydo 毫无疑问,Python ...

  • Python中什么是有序序列?列表元组及字符串

    Q:Python中的列表.元组.字符串是有序序列吗? A:当然,列表.元组.字符串是Python中的有序序列,其中列表是可变对象,元组和字符串是不可变对象,接下来我们一起来看看具体的内容介绍吧. 什么 ...

  • 连接字符串配置文件中存储

    SqlConnection conn = new SqlConnection(); //手写 //string connStr = "server=.;database=TestBase;u ...

  • 说说Python中字符串大小写转换?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • python中5各常用的连接函数

    目录: 1. concat 2. append 3. merge 4. join 5. combine 总结 1. concat concat是pandas中专门用于数据连接合并的函数,功能非常强大, ...

  • python中列表,元组,字符串如何互相转换

    python中有三个内建函数:列表,元组和字符串,他们之间的互相转换使用三个函数,str(),tuple()和list(),具体示例如下所示:>>> s = "xxxxx& ...

  • 在Python中使用正则表达式去掉字符串里的html标签

    用python处理html代码的转义与还原 转义 escape: import html s = cgi.escape("""& < >"& ...

  • Python 中的函数装饰器和闭包

    函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另一个函数,称为被装饰函数.装饰器可以修改这个函数再将其返回, ...