前幾篇文章,我們對Python常用的操作技能進行了匯總。今天,我們來梳理一下Python拼接字符串的幾種常用方法,並對方法進行比較。
本篇開始之前我們先看一下Python之禪中對於編碼的一些建議:
Python之禪(import this試試看)中有一句說得很好:「Simple is better than complex」這句話解釋為:簡單優於複雜,編碼過程中我們的代碼應該是簡潔的
……
「In the face of ambiguity, refuse the temptation to guess.」當存在多種可能,不要嘗試去猜測
「There should be one-- and preferably only one」而是儘量找一種,最好是唯一一種明顯的解決方案
對於字符串的拼接,網上眾說紛紜,有的說有4種方法,也有的說是6種方式、還有的甚至匯總了7種方式。各種方式都是儘可能將能拼接字符串的功能全部進行梳理匯總。名目繁雜,不便於記憶。本篇不會全部進行匯總,旨在通過幾種常用的方法在不同條件下性能進行對比,為大家提供一種字符串使用的指導意見。大家選擇自己熟悉的掌握並使用即可,不需要全部進行記憶(留下大腦空間記點別的東西……)。
常見的字符串拼接方式
「+」操作符拼接「+」操作符連接字符串是Python中比較經典的字符串拼接方式。可以使用「+」將兩個字符串直接進行拼接。同時,它可以自主判斷是進行加法操作還是拼接字符串操作,當對字符串和數值型數據(整形、浮點型)進行拼接時,會拋出TypeError異常。
s1 = 'string1 '
s2 = 'string2'
s1 + s2
>>>「string1 string2」
「%」操作符拼接這種方案能很好的實現字符串拼接,並且,可以進行字符串格式控制,但這種方式在處理大量字符串數據時可讀性較差(尤其是進行大量字符串格式控制時,格式控制方式可參照網絡教程)。「+」操作在拼接字符串與其它數據結構時,會拋出異常,但是「%」可以拼接非字符串數據(需要提供這種數據的類型,如「%d」、「%f」、%x等)。它不能將字符串與列表、字典、元組等結構直接拼接(一行代碼中不適用for循環)。
s1 = 'string1 '
s2 = 'string2'
"%s %s" % (s1, s2)
>>>"string1 string2"
format()函數拼接format()函數是字符串對象提供的一個方法。對於字符串還可以使用該函數進行格式化操作(參加有很多類似教程)。比如使用常用的時間模塊time對時間進行格式化輸出。在控制臺輸出一串字符串時經常使用這個函數。它是一種替代「%」進行控制字符串輸出的最佳方案。使用「+」操作符連接不同類型的數據結構時,拋出異常;但是format()函數不會,它能實現不同類型的數據結構之間的(字符串和其它類型數據結構)拼接,這點尤其重要,也很常用。
s1 = 'string1 '
s2 = 'string2'
「{} {}".format(s1, s2)
>>>「string1 string2」
它可以將字符串與其它數據結構直接進行拼接輸出
lst = [1, 2, 3]
dic = {1:'a', 2:'b', 3:'c'}
tup = (1, 2, 3)
"{} {} {} {}".format(s1, lst, dic, tup)
>>>"string [1, 2, 3] {1: 'a', 2: 'b', 3: 'c'} (1, 2, 3)"
join()函數拼接它可以將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串。常用於網址拼接、列表數據拼接等。在列表、元組拼接時,其性能明顯優於「+」操作符(少量數據拼接可能差別不大)。
s1 = 'string1 '
s2 = 'string2'
' '.join(s1, s2)
>>>「string1 string2」
lst = [s1, s2]
'\t'.join(lst)
>>>「string1 string2」
F-strings拼接在python3.6.2版本中,PEP 498 提出一種新型字符串格式化機制,被稱為「字符串插值」或者更常見的一種稱呼是F-strings,F-strings提供了一種明確且方便的方式將python表達式嵌入到字符串中來進行格式化(用法參照Python3.6.2文檔)。
s1 = 'string1 '
s2 = 'string2'
f'{s1} {s2}!'
>>>「string1 string2」
優缺點分析
「+」操作符【優點】簡單、便於理解和使用
【缺點】不便於進行輸出格式控制
"%"操作符【優點】需要指明連接數據結構類型,易於糾錯,可控制格式輸出
【缺點】使用起來麻煩,數據多時,可讀性較差
format()函數
【優點】可控制格式輸出,替代『%』,可直接拼接不同數據結構
【缺點】數據量大時,容易弄錯傳入參數次序(改進:使用key-value方式傳值)
join()函數拼接【優點】比較適用於連接序列對象中(例如列表)的元素,並設置統一的間隔符。
【缺點】不適合進行零散片段的、不處於序列集合的元素拼接
F-strings拼接【優點】可讀性上面可以秒殺format()函數
【缺點】向前兼容性差(拿到Python3.6.2之前版本運行出錯)
如何使用
最近一直在研究這個課題,網上也有很多使用建議,個人梳理了一下,主要用法是這樣的:
當要處理類似字符串列表這樣的數據結構拼接時,採用join()方式
當拼接的字符串長度小於20時,選用+號操作符
當拼接的字符串長度超過20時,Python3.6.2及以上的版本建議使用F-strings進行拼接,Python3.6.2以下的版本建議使用format()或join()。
好了,今天的內容就到這裡了。我們主要對幾種字符串拼接的常用方法進行了梳理,並給出了使用建議,至於為什麼要這麼做?請看下文,我們後續會對如何這些方法的性能逐個進行測試。喜歡的朋友們關注我哦!大家還有好的方法麼?歡迎留下寶貴意見。
轉載請註明出處,百家號:Python高手養成