「作者主頁」:士別三日wyx
「作者簡(jiǎn)介」:CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡(luò)安全領(lǐng)域優(yōu)質(zhì)創(chuàng)作者
「推薦專欄」:小白零基礎(chǔ)《Python入門到精通》
join() 可以將元素按照分隔符「拼接」成新的字符串。
語法
string.join( Iterable[str] )
參數(shù)
- Iterable[str] :(必選,可迭代的序列)要拼接的元素
返回值
- 返回拼接后的新字符串
實(shí)例:用*
將數(shù)組中的字符串拼接在一起
print('*'.join(['1', '2', '3']))
輸出:
1*2*3
1、參數(shù)要求
1) join() 只接收「一個(gè)參數(shù)」,否則會(huì)報(bào)錯(cuò) TypeError: join() takes exactly one argument
2)接收的參數(shù)必須是「可迭代對(duì)象」(有__iter__
方法的對(duì)象),否則會(huì)報(bào)錯(cuò) TypeError: can only join an iterable
3)參數(shù)是可迭代對(duì)象時(shí),里面的所有「元素」都必須是「字符串類型」,否則會(huì)報(bào)錯(cuò) TypeError: sequence item 0: expected str instance
源碼中也寫明了,給的是一個(gè)字符串(Python內(nèi)置函數(shù)看不到具體源碼,只有描述)。
2、拼接不同的數(shù)據(jù)類型
join() 可以拼接列表、元組、字典等可迭代序列,但拼接的情況并非完全相同。
2.1、字符串
「字符串」也是可迭代序列,拼接時(shí),會(huì)逐個(gè)「字符」拼接
print('*'.join('abc123'))
輸出:
a*b*c*1*2*3
2.2、列表
拼接「列表」時(shí),會(huì)逐個(gè)「元素」進(jìn)行拼接
print('*'.join(['aa', 'bb', 'c']))
輸出:
aa*bb*c
2.3、元組
拼接「元組」時(shí),也是逐個(gè)「元素」進(jìn)行拼接
print('*'.join(('aa', 'bb', 'c')))
輸出:
aa*bb*c
2.4、字典
拼接「字典」時(shí),只會(huì)拼接「鍵」,而不拼接「值」;即使有非字符串類型的值,也不會(huì)報(bào)錯(cuò)
print('*'.join({'key1': 'value1', 'key2': 2}))
輸出:
key1*key2
3、join和+的區(qū)別?
面試可能會(huì)問, join() 和+
都可以拼接字符串,但 join() 的拼接「效率」比+
要快很多。
首先,字符串是「不可變」的,拼接字符串得開辟新的內(nèi)存空間,用來存儲(chǔ)拼接后的字符串。
+
在拼接字符串時(shí),會(huì)先開辟內(nèi)存空間,把拼接后的字符串放進(jìn)去,每一個(gè) +
都會(huì)開辟一次內(nèi)存空間。
join() 拼接字符串時(shí),會(huì)提前算好需要開辟多大的空間,然后申請(qǐng)內(nèi)存,把拼接后的字符串放進(jìn)去,無論拼接多少字符串,都只開辟一次內(nèi)存空間。
我們用代碼驗(yàn)證一下兩者的拼接效率
import time
list1 = ['test str' for n in range(1000000)]
start_time = time.time()
a = ''
for i in list1:
a = a + i
end_time = time.time()
print(end_time - start_time)
start_time = time.time()
b = ''.join(list1)
end_time = time.time()
print(end_time - start_time)
輸出:文章來源:http://www.zghlxwxcb.cn/news/detail-532035.html
8.9302077293396
0.019005537033081055
綜上所訴,+ 會(huì)消耗更多的臨時(shí)內(nèi)存,并且數(shù)據(jù)量越大,效率越低。文章來源地址http://www.zghlxwxcb.cn/news/detail-532035.html
到了這里,關(guān)于Python join()函數(shù)使用詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!