Python中別再用 ‘+‘ 拼接字符串了!

大家好,在 Python 編程中,我們常常需要對字符串進行拼接。你可能會自然地想到用 + 操作符將字符串連接起來,畢竟這看起來簡單明了。

在 Python 中,字符串是不可變的數據類型,這意味著一旦字符串被創建,它就不能被修改。因此,當你嘗試通過使用 + 來連接字符串時,實際上 Python 會創建新的字符串對象,并將舊字符串的內容復制到新字符串中,然后添加新內容。這個過程在處理大量數據或在循環中進行時,會導致性能問題。

image-20240523115507809

為什么不推薦使用 “+”

在 Python 中,字符串是不可變的對象。這意味著每次使用 + 拼接字符串時,都會創建一個新的字符串對象,而不是在原有的字符串上進行修改。這會導致以下幾個問題:

  1. 性能問題:每次拼接都會創建一個新的字符串對象,這在大量拼接操作時,會帶來性能上的損失。
  2. 內存浪費:頻繁的字符串拼接會導致大量的臨時字符串對象的創建,增加內存的開銷。

讓我們通過一個例子來具體看看這個問題。

示例代碼

def concatenate_with_plus(n):result = ""for i in range(n):result += str(i)return resultimport time
start_time = time.time()
concatenate_with_plus(100000)
end_time = time.time()
print(f"Using '+': {end_time - start_time} seconds")

在這個例子中,我們通過 + 拼接字符串,測試其性能。試著運行這個代碼,你會發現當 n 值很大時,運行時間明顯增加。

image-20240523114918468

更高效的替代方法

那么,有哪些更高效的字符串拼接方法呢?我們介紹以下幾種:

  1. 使用 join 方法
  2. 使用格式化字符串(f-strings)
  3. 使用字符串模板

使用 join 方法

join 方法通過一個字符串作為分隔符,將一個可迭代對象中的元素連接成一個新的字符串。這種方法在拼接大量字符串時效率更高,因為它避免了頻繁創建新的字符串對象。

示例代碼

import time
def concatenate_with_join(n):result = ''.join(str(i) for i in range(n))return resultstart_time = time.time()
concatenate_with_join(100000)
end_time = time.time()
print(f"Using 'join': {end_time - start_time} seconds")

image-20240523114844764

使用格式化字符串(f-strings)

Python 3.6 引入了格式化字符串(f-strings),它不僅使代碼更簡潔,而且在某些情況下也能提高性能。

示例代碼

def concatenate_with_fstrings(n):result = ''.join(f'{i}' for i in range(n))return resultstart_time = time.time()
concatenate_with_fstrings(100000)
end_time = time.time()
print(f"Using f-strings: {end_time - start_time} seconds")

image-20240523115008908

通過對比,我們可以看到 join 方法在大量字符串拼接時性能最優,而 f-strings 在代碼簡潔性和可讀性上也有很大的優勢。雖然在小規模拼接時,+ 操作符的性能差異不明顯,但在處理大數據量時,選擇高效的拼接方法尤為重要。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15035.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15035.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15035.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python】—— lambda表達式

目錄 (一)應用場景 (二)lambda 語法 (三)示例分析 (四)lambda參數形式 4.1 無參數 4.2 一個參數 4.3 默認參數 4.4 可變參數 :*args 4.5 可變參數 :…

【Python爬蟲】案例_github模擬登錄

import requests import re from datetime import datetimedef login():sessionrequests.session()session.headers {User-Agent :XXXX #寫自己的}url1 https://github.com/loginres_1 session.get(url1).content.decode()token re.findall(name"authenticity_token&q…

基于Matlab實現BP神經網絡的手寫數字識別

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 手寫數字識別是計算機視覺和模式識別領域的一個經典問題,具有廣泛的應用場景&…

信息安全從業者書單推薦

作為一名網安人,身上肩負的責任是很大的,能力越大,責任也越大,反過來責任越大,能力也必須跟得上。不管是想進這行,還是已經在這行,持續學習肯定是不能缺少的,除了在工作中積累&#…

qt多語言翻譯不生效的原因

假設您有QT語言家的基礎知識,假設網上那些所有的問題您都已經排查過了,但依然翻譯不生效,那么可以看下這篇帖子,其實就一個問題,變量的生命周期,假設QTranslator是一個函數內的變量,且沒有被聲明…

億圖圖示——刪除水印

一、文件以PPT格式導出 二、點擊水印所在區域,點擊多次delete鍵 三、調整PPT頁面尺寸 四、轉成PDF 五、PDF轉成圖片

Spring的Profile功能及其應用場景

Spring的Profile功能是一種條件化配置機制,它允許開發者根據不同的運行環境或條件來定義和使用不同的bean和配置。Profile功能使得Spring應用程序可以靈活地適應不同的部署場景,而無需修改代碼。 Profile功能的作用: 環境隔離:可…

從0開始寫一個環境保護網站的第3天(JAVAWEB)

1.目標 實現首頁的環境保護原因的查詢,和底部友情連接部分 2.實現 2.1建立數據庫表格(這里數據全是百度查詢) 環境保護原因表: 友情連接表:(數據來源https://zhuanlan.zhihu.com/p/696243646&#xff0…

SqlSession是什么?在MyBatis-Spring中有什么應用?

目錄 一、SqlSession是什么 二、SqlSession在MyBatis中的應用 三、SqlSession在Spring中的應用 一、SqlSession是什么 SqlSession 是 MyBatis 框架中的一個核心概念,它代表與數據庫的一次會話。MyBatis 是一個流行的 Java 持久層框架,用于簡化數據庫…

c++題目_農場和奶牛

𝐵B 頭奶牛 (1≤𝐵≤25000)(1≤B≤25000),有 𝑁(2𝐵≤𝑁≤50000)N(2B≤N≤50000) 個農場,編號 11 到 𝑁N,有 𝑀(𝑁?1≤𝑀≤100000)M(…

【Linux】fork和exec中的信號繼承探索

fork和exec中的信號繼承探索 一、結論二、代碼驗證2.1 代碼編寫2.2 代碼執行 三、linux源碼驗證四、APUE中的驗證五、其他 一、結論 fork時子進程會繼承父進程的信號處理方式,包括父進程設置信號為SIG_DFL或SIG_IGN或捕獲后設置自定義處理函數。exce時子進程會繼承…

ChatGPT寫作指南:掌握5種高效格式成為寫作達人【含實用示例】

1. **簡潔指令** 當任務較簡單時,可以用一小段話來說明,便于理解和執行。如下例: 背景:我負責運營一個旅游主題的社交媒體賬號。 角色:作為一位經驗豐富的文案創作專家,我擅長打造引人注目的旅游內容…

【無標題】亞馬遜5月24日宣布推出2024出口跨境物流加速器計劃

亞馬遜中國5月24日鄭重宣布啟動“2024亞馬遜出口跨境物流加速器計劃”,旨在依托其世界領先的物流網絡和前沿技術,結合本土資源,不斷優化跨境物流服務,以強化中國賣家在跨境物流供應鏈管理方面的能力,進而提升整體效率&…

datagridview復選框選中響應

winform經常用datagridview來處理相關的數據顯示,如果datagridview有復選框,我們應該如何處理相關選中響應。選擇datagridview的cellcontentclick事件,代碼如下: bool isSelectedGridViewRow false; private void da…

深度神經網絡——什么是 K 均值聚類?

K 均值聚類 K 均值聚類是 無監督學習在所有無監督學習算法中,K 均值聚類可能是使用最廣泛的,這要歸功于它的強大功能和簡單性。 K-means 聚類到底是如何工作的? 簡而言之,K 均值聚類的工作原理是 創建參考點(質心&am…

Halcon 極坐標轉換圖像

一、概述 先看效果 將圓形的用極坐標轉換成矩性然后再進行識別或者其他缺陷檢測,最后在還圓到原圖中 二、原理: halcon 圓環類缺陷檢測的一種方法(極坐標變換法)_halcon缺口檢測-CSDN博客 圖像極坐標變換與反變換(…

吳恩達深度學習筆記:超 參 數 調 試 、 Batch 正 則 化 和 程 序 框 架(Hyperparameter tuning)3.4-3.5

目錄 第二門課: 改善深層神經網絡:超參數調試、正 則 化 以 及 優 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第三周: 超 參 數 調 試 、 Batch 正 則 化 和 程 序 框 架(Hyperparameter …

Spark SQL【Java API】

前言 之前對 Spark SQL 的影響一直停留在 DSL 語法上面,感覺可以用 SQL 表達的,沒有必要用 Java/Scala 去寫,但是面試一段時間后,發現不少公司還是在用 SparkSQL 的,京東也在使用 Spark On Hive 而不是我以為的 Hive O…

ubuntu20.04 開機自動掛載外加硬盤

文章目錄 一、問題描述二、操作1. 查找新添盤符2. 格式化硬盤文件系統3. 掛載硬盤4. 開機自動掛載5. 取消掛載6. 查看掛載的硬盤信息 一、問題描述 因電腦使用一段時間后自身硬盤不足,需外加硬盤使得電腦自動識別加載。 二、操作 1. 查找新添盤符 sudo blkid自己…

Linux基礎命令詳解

Linux基礎命令詳解 1. ls 解釋:列出目錄內容用法:ls [選項] [文件名]示例:ls -l(以長格式顯示文件信息) 2. cd 解釋:更改目錄用法:cd [目錄名]示例:cd /home(切換到/…