|
「作者主页」:士别三日wyx「作者简介」:CSDNtop100、阿里云博客专家、华为云享专家、网络安全领域优质创作者「推荐专栏」:小白零基础《Python入门到精通》join1、参数要求2、拼接不同的数据类型2.1、字符串2.2、列表2.3、元组2.4、字典3、join和+的区别?join()可以将元素按照分隔符「拼接」成新的字符串。语法string.join(Iterable[str])1参数Iterable[str]:(必选,可迭代的序列)要拼接的元素返回值返回拼接后的新字符串实例:用*将数组中的字符串拼接在一起print('*'.join(['1','2','3']))1'运行运行输出:1*2*311、参数要求1)join()只接收「一个参数」,否则会报错TypeError:join()takesexactlyoneargument2)接收的参数必须是「可迭代对象」(有__iter__方法的对象),否则会报错TypeError:canonlyjoinaniterable3)参数是可迭代对象时,里面的所有「元素」都必须是「字符串类型」,否则会报错TypeError:sequenceitem0:expectedstrinstance源码中也写明了,给的是一个字符串(Python内置函数看不到具体源码,只有描述)。2、拼接不同的数据类型join()可以拼接列表、元组、字典等可迭代序列,但拼接的情况并非完全相同。2.1、字符串「字符串」也是可迭代序列,拼接时,会逐个「字符」拼接print('*'.join('abc123'))1'运行运行输出:a*b*c*1*2*312.2、列表拼接「列表」时,会逐个「元素」进行拼接print('*'.join(['aa','bb','c']))1'运行运行输出:aa*bb*c12.3、元组拼接「元组」时,也是逐个「元素」进行拼接print('*'.join(('aa','bb','c')))1'运行运行输出:aa*bb*c12.4、字典拼接「字典」时,只会拼接「键」,而不拼接「值」;即使有非字符串类型的值,也不会报错print('*'.join({'key1':'value1','key2':2}))1'运行运行输出:key1*key213、join和+的区别?面试可能会问,join()和+都可以拼接字符串,但join()的拼接「效率」比+要快很多。首先,字符串是「不可变」的,拼接字符串得开辟新的内存空间,用来存储拼接后的字符串。+在拼接字符串时,会先开辟内存空间,把拼接后的字符串放进去,每一个+都会开辟一次内存空间。join()拼接字符串时,会提前算好需要开辟多大的空间,然后申请内存,把拼接后的字符串放进去,无论拼接多少字符串,都只开辟一次内存空间。我们用代码验证一下两者的拼接效率importtimelist1=['teststr'forninrange(1000000)]start_time=time.time()a=''foriinlist1:a=a+iend_time=time.time()print(end_time-start_time)start_time=time.time()b=''.join(list1)end_time=time.time()print(end_time-start_time)123456789101112131415输出:8.93020772933960.01900553703308105512综上所诉,+会消耗更多的临时内存,并且数据量越大,效率越低。
|
|