真的了解字符串拼接嗎?用Python拼接字符串的常用方法及性能分析

2021-01-10 python高手養成

前幾篇文章,我們對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」而是儘量找一種,最好是唯一一種明顯的解決方案

先看一下Python之禪

對於字符串的拼接,網上眾說紛紜,有的說有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高手養成

相關焦點

  • MySQL拼接字符串,GROUP_CONCAT 值得擁有
    領導想要查看每個 performance 下都有誰,同時要求將這些人的名稱要逗號拼接成一個字符串,也就是說要得到下面的結果:要將結果集中某個指定的列進行字符串拼接,這要怎麼做呢?主角閃亮登場GROUP_CONCAT(expr)在 Mysql 官方文檔 中,該函數被放在聚合函數章節,如果你要按照指定欄位分組拼接,就要配合關鍵字GROUP BY來使用的定義該函數返回一個字符串結果,該字符串結果是通過分組串聯的非NULL值。如果沒有非NULL值,則返回NULL。完整語法如下:What?
  • 奇妙的Python編程之旅:字符串拼接,格式化輸出和深淺複製
    我們學了序列類型有字符串(str)、列表(list)、元組(tuple),今天我們來學習一下字符串的拼接、格式化輸出與深淺複製。開發工具:IDLE (Python 3.7 64-bit) (註:不需要3.7版本的也行,只需要Python3的版本都可以,32位和64位的系統都可以不需要糾結)
  • 元旦將至,祝新年快樂的最佳方式,用Python找到Happy New Year!
    新的一年要有學習計劃哦前幾篇內容我們了解了拼接字符串的常用方法(參見真的了解字符串拼接嗎?用Python拼接字符串的常用方法及性能分析),並對幾種字符串拼接方法作了性能上的分析(參見字符串拼接方式哪種快?
  • 傻傻分不清系列|Python中各種字符串處理方法
    Pandas字符串方法和字符串內建函數有什麼不同?運算效率真的像傳聞那麼高嗎?今天我們就好好捋一下這塊Python易混淆的知識點。1.,可以將多個字符型Series對象用加法運算符直接相加:點擊添加圖片描述(最多60個字)編輯但是Pandas字符串方法中有更加強大的字符串拼接功能,那就是.str.cat()方法。
  • 今天學Python第三課常用的數據類型有三種字符串,整數,浮點數
    數據類型在Python裡,常用的數據類型有三種,字符串,整數,浮點數字符串首先, 我們來看一下「黃袍加身」的字符串, 字符串英文名string,簡稱str。 其實, 在上一課的時候, 你已經用過它了,看面龐很熟悉。
  • JavaScript字符串-概念
    以上兩種方法用的是比較少的,下面介紹通常使用的 3.通過常量創建字符串 輸出結果為 字符串的屬性 1.length; 返回的是當前字符串中字符的個數 例如我們要輸出hello的個數:
  • Python中字符串編碼在二進位之間相互轉換的方法
    第八十節:字符串編碼轉換在學習「計算字符串的長度」(詳見第72節內容Python中如何計算字符串的長度),對編碼的概念、分類和作用,做過一個簡單的介紹,今天的內容,還是從「編碼」開始談。在Python中,常用的字符串類型有str和bytes兩種。str表示Unicode字符,就是包括ASCII碼、utf-8碼、GBK碼、GB2312碼之類的編碼;bytes表示的則是二進位數據,其中包括了編碼的文本。
  • Python中去除字符串首尾空格、特殊字符和指定子字符串的方法
    在Python中,提供了一個去除字符串首尾空格和特殊字符的方法,就是使用strip(),它的語法格式是下面這樣的:str.strip()設定一個字符串,然後用實例來看一下這個方法的應用,詳見下圖:;使用print()函數輸出字符串時,其中的特殊字符「\n、\r、\t」則被默認為命令執行了;使用strip()方法,只能去除字符串首尾的空格和特殊字符,存在於字符串中間的空格和特殊字符是無法去除的。
  • pandas向量化字符串操作方法!
    作者:小伍哥 來源:AI入門學習python內置一系列強大的字符串處理方法,但這些方法只能處理單個字符串,處理一個序列的字符串時,需要用到循環。那麼,有沒有辦法,不用循環就能同時處理多個字符串呢,pandas的向量化操作就提供了這樣的方法。
  • Go語言學習筆記之字符串一
    Go語言是一個年輕人,身上擁有c++,java,python等語言的特點。在網絡通信、並發和並行編程擁有極好的體驗,當然不僅僅在這上上面,還有網絡編程,web應用,應用下載等有著非常大的潛力。(str) fmt.Println( strings.HasPrefix(str, "Th")) //Contains 函數判斷字符串包含關係\ fmt.Println("\nContains函數判斷字符串包含關係:") str4 := "Ajian loves python and goland" fmt.Println(str4) fmt.Println(strings.Contains
  • python數據類型總結——列表
    python用列表或元組來幫助我們。python列表一系列元素組成一個集合,可能通過索引,對每個元素進行訪問。這種數據類型統稱為序列。在python中,字符串就是一種序列。可以用中括號來聲明列表。列表是可變的。
  • 初識python
    2,python歷史。宏觀上:python2 與 python3 區別:python2 源碼不標準,混亂,重複代碼太多,python3 統一 標準,去除重複代碼。3,python的環境。編譯型:一次性將所有程序編譯成二進位文件。缺點:開發效率低,不能跨平臺。優點:運行速度快。
  • Python基礎學習之常用六大數據類型
    剛開始學習一門程式語言,除了了解運行環境與語言類型之外,最基本還是從該語言的基本數據類型開始學起。Python六大常用數據類型: int 整數 float 浮點數 str 字符串 list 列表 tuple 元組 dict 字典講解這些先說一下python中的變量與變量名。
  • Python數據類型串講(中)
    python中的內建序列有6種:列表、元祖、字符串、Unicode字符串、xrange對象、buffer對象,其中列表和元祖是最常見的序列,應重點掌握。字符串在上一篇文章中已簡單介紹,下面將以字符串為例,對序列的通用操作進行詳講。
  • Python正則表達式:特殊符號和字符
    簡而言之,正則表達式(簡稱regex)是由一些字符和特殊符號組成的字符串,它描述了模式的重複或者表達多個字符。python通過標準庫中的re模塊來支持正則表達式。下圖是最常見的特殊符號和字符,也稱元字符,正是它給予正則表達式強大的功能和靈活性。1.擇一匹配符號表示擇一匹配的管道符號(|),鍵盤上的豎線,表示從多個模式中選擇其中一個的操作。
  • JavaScript字符串 - 查找方法
    字符串查找的方法子字符串代表的就是要查找的字符串1.indexOf();格式:字符串.indexOf( 子字符串串,開始查找的位置 );返回值:如果在字符串中查找到了子字符串第一次出現的位置,返回子字符串出現的位置,否則沒有查找到返回 -
  • Python基礎教程(一) - 序列:字符串、列表和元組
    字符串字符串類型是Python裡面最常見的類型。可以簡單的通過在引號間包含字符的方式創建它,單引號和雙引號是相同的。下面來寫一些例子來展示下如何訪問字符串的值、如何改變和刪除字符串。字符串不變性:字符串是一種不可變類型,就是說它的值是不能被改變和修改的。意味著你想要修改一個字符串或者截取一個子串,你必須新建一個字符串。聽起來比實際情況複雜。我們可以用id()函數來明顯的看一下發生了什麼。id()函數返回一個對象的身份,這個有點類似於「內存地址」。注意修改前後的身份是不同的。
  • 第7章 pandas文本數據初學者需要掌握的幾種基本的數據預處理方法
    子組與函數替換四、子串匹配與提取1. str.extract方法2. str.extractall方法3. str.contains和str.match五、常用字符串方法1.Nullable類型,而object會隨缺失值的存在而改變返回類型② 某些Series方法不能在string上使用,例如:Series.str.decode(),因為存儲的是字符串而不是字節③ string類型在缺失值存儲或運算時,類型會廣播為pd.NA,而不是浮點型np.nan其餘全部內容在當前版本下完全一致,但迎合Pandas的發展模式,我們仍然全部用string
  • R語言-stringr-字符串處理
    R包stringr處理字符相對簡單,尤其是我常用Power BI,但是對M語言不熟悉,不會處理字符數據,往往我就先利用R清洗字符數據列。本文記錄工作中常用的字符處理函數,部分案例照搬R for Data Science的字符部分。
  • MySQL字符串截取 和 截取字符進行查詢
    通過mysql自帶的一些字符串截取函數,對數據進行處理,下面是我整理的字符串截取 和 截取字符進行查詢。一、MySQL中字符串的截取MySQL中有專門的字符串截取函數:其中常用的有兩種:substring_index(str,delim,count) 和concat 1.substring_index(str,delim,count) 函數的使用較為普遍。