日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python字符串相加_Python实用技法第33篇:字符串连接及合并

發(fā)布時(shí)間:2025/3/11 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python字符串相加_Python实用技法第33篇:字符串连接及合并 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問題

我們想將許多小字符串合并成一個(gè)大的字符串。

解決方案

如果想要合并的字符串在一個(gè)序列或可迭代對(duì)象中,那么將它們合并起來的最快方法就是使用join()方法。示例如下:

>>> parts = ['Is', 'Chicago', 'Not', 'Chicago?']

>>> ' '.join(parts)

'Is Chicago Not Chicago?'

>>> ','.join(parts)

'Is,Chicago,Not,Chicago?'

>>> ''.join(parts)

'IsChicagoNotChicago?'

>>>

Python資源分享qun 784758214 ,內(nèi)有安裝包,PDF,學(xué)習(xí)視頻,這里是Python學(xué)習(xí)者的聚集地,零基礎(chǔ),進(jìn)階,都?xì)g迎

初看上去語法可能顯得有些怪異,但是join()操作其實(shí)是字符串對(duì)象的一個(gè)方法。這么設(shè)計(jì)的部分原因是因?yàn)橄胍喜⒃谝黄鸬膶?duì)象可能來自于各種不同的數(shù)據(jù)序列,比如列表、元組、字典、文件、集合或生成器,如果單獨(dú)在每一種序列對(duì)象中實(shí)現(xiàn)一個(gè)join()方法就顯得太冗余了。因此只需要指定想要的分隔字符串,然后在字符串對(duì)象上使用join()方法將文本片段粘合在一起就可以了。

如果只是想連接一些字符串,一般使用+操作符就足夠完成任務(wù)了:

>>> a = 'Is Chicago'

>>> b = 'Not Chicago?'

>>> a + ' ' + b

'Is Chicago Not Chicago?'

>>>

針對(duì)更加復(fù)雜的字符串格式化操作,+操作符同樣可以作為format()的替代,很好地完成任務(wù):

>>> print('{} {}'.format(a,b))

Is Chicago Not Chicago?

>>> print(a + ' ' + b)

Is Chicago Not Chicago?

>>>

如果打算在源代碼中將字符串字面值合并在一起,可以簡(jiǎn)單地將它們排列在一起,中間不加+操作符。示例如下:

>>> a = 'Hello' 'World'

>>> a

'HelloWorld'

>>>

討論

字符串連接這個(gè)主題可能看起來還沒有高級(jí)到要用一整節(jié)的篇幅來講解,但是程序員常常會(huì)在這個(gè)問題上做出錯(cuò)誤的編程選擇,使得他們的代碼性能受到影響。

最重要的一點(diǎn)是要意識(shí)到使用+操作符做大量的字符串連接是非常低效的,原因是由于內(nèi)存拷貝和垃圾收集產(chǎn)生的影響。特別是你絕不會(huì)想寫出這樣的字符串連接代碼:

s = ''

for p in parts:

s += p

這種做法比使用join()方法要慢上許多。主要是因?yàn)槊總€(gè)+=操作都會(huì)創(chuàng)建一個(gè)新的字符串對(duì)象。我們最好先收集所有要連接的部分,最后再一次將它們連接起來。

一個(gè)相關(guān)的技巧(很漂亮的技巧)是利用生成器表達(dá)式(見1.19節(jié))在將數(shù)據(jù)轉(zhuǎn)換為字符串的同時(shí)完成連接操作。示例如下:

>>> data = ['ACME', 50, 91.1]

>>> ','.join(str(d) for d in data)

'ACME,50,91.1'

>>>

對(duì)于不必要的字符串連接操作也要引起重視。有時(shí)候在技術(shù)上并非必需的時(shí)候,程序員們也會(huì)忘乎所以地使用字符串連接操作。例如在打印的時(shí)候:

print(a + ':' + b + ':' + c) # Ugly

print(':'.join([a, b, c])) # Still ugly

print(a, b, c, sep=':') # Better

將字符串連接同I/O操作混合起來的時(shí)候需要對(duì)應(yīng)用做仔細(xì)的分析。例如,考慮如下兩段代碼:

# Version 1 (string concatenation)

f.write(chunk1 + chunk2)

# Version 2 (separate I/O operations)

f.write(chunk1)

f.write(chunk2)

如果這兩個(gè)字符串都很小,那么第一個(gè)版本的代碼能帶來更好的性能,這是因?yàn)閳?zhí)行一次I/O系統(tǒng)調(diào)用的固有開銷就很高。另一方面,如果這兩個(gè)字符串都很大,那么第二個(gè)版本的代碼會(huì)更加高效。因?yàn)檫@里避免了創(chuàng)建大的臨時(shí)結(jié)果,也沒有對(duì)大塊的內(nèi)存進(jìn)行拷貝。這里必須再次強(qiáng)調(diào),你需要對(duì)自己的數(shù)據(jù)做分析,以此才能判定哪一種方法可以獲得最好的性能。

最后但也是最重要的是,如果我們編寫的代碼要從許多短字符串中構(gòu)建輸出,則應(yīng)該考慮編寫生成器函數(shù),通過yield關(guān)鍵字生成字符串片段。示例如下:

def sample():

yield 'Is'

yield 'Chicago'

yield 'Not'

yield 'Chicago?'

關(guān)于這種方法有一個(gè)有趣的事實(shí),那就是它不會(huì)假設(shè)產(chǎn)生的片段要如何組合在一起。比如說可以用join()將它們簡(jiǎn)單的連接起來:

text?=?''.join(sample())

或者,也可以將這些片段重定向到I/O:

for part in sample():

f.write(part)

又或者我們能以混合的方式將I/O操作智能化地結(jié)合在一起:

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)

for part in combine(sample(), 32768):

f.write(part)

Python資源分享qun 784758214 ,內(nèi)有安裝包,PDF,學(xué)習(xí)視頻,這里是Python學(xué)習(xí)者的聚集地,零基礎(chǔ),進(jìn)階,都?xì)g迎

關(guān)鍵在于這里的生成器函數(shù)并不需要知道精確的細(xì)節(jié),它只是產(chǎn)生片段而已。

總結(jié)

以上是生活随笔為你收集整理的python字符串相加_Python实用技法第33篇:字符串连接及合并的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。