亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

Python 合并拼接字符串的方法

瀏覽:3日期:2022-07-16 10:34:26

問題

你想將幾個小的字符串合并為一個大的字符串

解決方案

如果你想要合并的字符串是在一個序列或者 iterable 中,那么最快的方式就是使用 join() 方法。比如:

>>> parts = [’Is’, ’Chicago’, ’Not’, ’Chicago?’]>>> ’ ’.join(parts)’Is Chicago Not Chicago?’>>> ’,’.join(parts)’Is,Chicago,Not,Chicago?’>>> ’’.join(parts)’IsChicagoNotChicago?’>>>

初看起來,這種語法看上去會比較怪,但是 join() 被指定為字符串的一個方法。這樣做的部分原因是你想去連接的對象可能來自各種不同的數據序列(比如列表,元組,字典,文件,集合或生成器等),如果在所有這些對象上都定義一個 join() 方法明顯是冗余的。因此你只需要指定你想要的分割字符串并調用他的 join() 方法去將文本片段組合起來。

如果你僅僅只是合并少數幾個字符串,使用加號(+)通常已經足夠了:

>>> a = ’Is Chicago’>>> b = ’Not Chicago?’>>> a + ’ ’ + b’Is Chicago Not Chicago?’>>>

加號(+)操作符在作為一些復雜字符串格式化的替代方案的時候通常也工作的很好,比如:

>>> print(’{} {}’.format(a,b))Is Chicago Not Chicago?>>> print(a + ’ ’ + b)Is Chicago Not Chicago?>>>

如果你想在源碼中將兩個字面字符串合并起來,你只需要簡單的將它們放到一起,不需要用加號(+)。比如:

>>> a = ’Hello’ ’World’>>> a’HelloWorld’>>>

討論

字符串合并可能看上去并不需要用一整節(jié)來討論。但是不應該小看這個問題,程序員通常在字符串格式化的時候因為選擇不當而給應用程序帶來嚴重性能損失。

最重要的需要引起注意的是,當我們使用加號(+)操作符去連接大量的字符串的時候是非常低效率的,因為加號連接會引起內存復制以及垃圾回收操作。特別的,你永遠都不應像下面這樣寫字符串連接代碼:

s = ’’for p in parts: s += p

這種寫法會比使用 join() 方法運行的要慢一些,因為每一次執(zhí)行+=操作的時候會創(chuàng)建一個新的字符串對象。你最好是先收集所有的字符串片段然后再將它們連接起來。

一個相對比較聰明的技巧是利用生成器表達式(參考1.19小節(jié))轉換數據為字符串的同時合并字符串,比如:

>>> data = [’ACME’, 50, 91.1]>>> ’,’.join(str(d) for d in data)’ACME,50,91.1’>>>

同樣還得注意不必要的字符串連接操作。有時候程序員在沒有必要做連接操作的時候仍然多此一舉。比如在打印的時候:

print(a + ’:’ + b + ’:’ + c) # Uglyprint(’:’.join([a, b, c])) # Still uglyprint(a, b, c, sep=’:’) # Better

當混合使用I/O操作和字符串連接操作的時候,有時候需要仔細研究你的程序。比如,考慮下面的兩端代碼片段:

# Version 1 (string concatenation)f.write(chunk1 + chunk2)# Version 2 (separate I/O operations)f.write(chunk1)f.write(chunk2)

如果兩個字符串很小,那么第一個版本性能會更好些,因為I/O系統(tǒng)調用天生就慢。另外一方面,如果兩個字符串很大,那么第二個版本可能會更加高效,因為它避免了創(chuàng)建一個很大的臨時結果并且要復制大量的內存塊數據。還是那句話,有時候是需要根據你的應用程序特點來決定應該使用哪種方案。

最后談一下,如果你準備編寫構建大量小字符串的輸出代碼,你最好考慮下使用生成器函數,利用yield語句產生輸出片段。比如:

def sample(): yield ’Is’ yield ’Chicago’ yield ’Not’ yield ’Chicago?’

這種方法一個有趣的方面是它并沒有對輸出片段到底要怎樣組織做出假設。例如,你可以簡單的使用 join() 方法將這些片段合并起來:

text = ’’.join(sample())

或者你也可以將字符串片段重定向到I/O:

for part in sample(): f.write(part)

再或者你還可以寫出一些結合I/O操作的混合方案:

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)# 結合文件操作with open(’filename’, ’w’) as f: for part in combine(sample(), 32768): f.write(part)

這里的關鍵點在于原始的生成器函數并不需要知道使用細節(jié),它只負責生成字符串片段就行了。

以上就是Python 合并拼接字符串的方法的詳細內容,更多關于Python 合并拼接字符串的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 欧美国产成人精品一区二区三区 | 国产毛片久久国产 | 久久羞羞 | 欧美一级片在线 | 国产亚洲精品看片在线观看 | 欧美成人免费高清网站 | 久久精品精品 | 成人午夜毛片在线看 | 欧美一级毛片日本 | 美国一级毛片片aa免 | 亚洲国产欧美在线人成精品一区二区 | 中国性孕妇孕交在线 | 亚洲国产精品一区二区第四页 | 国产精品18久久久久久vr | 男女上下爽无遮挡午夜免费视频 | 免费人成在线观看视频不卡 | 成年人在线免费观看视频网站 | 国内精品自产拍在线观看91 | 欧美日韩在线观看精品 | 欧美日韩精品高清一区二区 | 美女黄视频免费观看 | 一级毛片视频 | 国产免费专区 | 一级淫片免费视频 | 韩国日本一级片 | 直接在线观看的三级网址 | 日韩一区在线播放 | 国产最新网站 | 日本人一级毛片视频 | 成 人色 网 站 欧美大片在线观看 | 欧美一区二区三区免费高 | 中国一级特黄视频 | 免费午夜扒丝袜www在线看 | 国产成年网站v片在线观看 国产成人aa在线视频 | 欧美一区二区三区四区在线观看 | 俄罗斯aa毛片极品 | 夜色福利久久久久久777777 | 亚洲精品久久99久久一区 | 99视频在线精品 | 99久久综合精品国产 | 视频一区久久 |