python字符串連接的三種方法及其效率、適用場景詳解

python字符串連接的方法,一般有以下三種:方法1:直接通過加號(+)操作符連接website=& 39;python& 39;+& 39;tab& 39;+& 39; com& 39;方法2

python字符串連接的方法,一般有以下三種:

方法1:直接通過加號(+)操作符連接

1
website?=?'python'?+?'tab'?+?'.com'

方法2:join方法

1
2
listStr?=?['python',?'tab',?'.com']?
website?=?''.join(listStr)

方法3:替換

1
website?=?'%s%s%s'?%?('python',?'tab',?'.com')

?

下面再來說一下三種方法的不同

方法1,使用簡單直接,但是網上不少人說這種方法效率低

之所以說python 中使用 + 進行字符串連接的操作效率低下,是因為python中字符串是不可變的類型,使用 + 連接兩個字符串時會生成一個新的字符串,生成新的字符串就需要重新申請內存,當連續相加的字符串很多時(a+b+c+d+e+f+...) ,效率低下就是必然的了

?

方法2,使用略復雜,但對多個字符進行連接時效率高,只會有一次內存的申請。而且如果是對list的字符進行連接的時候,這種方法必須是首選

?

方法3:字符串格式化,這種方法非常常用,本人也推薦使用該方法

?

下面用實驗來說明字符串連接的效率問題。

1
2
3
比較對象:加號連接?VS?join連接
python版本:?python2.7
系統環境:CentOS

實驗一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#?-*-?coding:?utf-8?-*-
from?time?import?time
def?method1():
????t?=?time()
????for?i?in?xrange(100000):
????????s?=?'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'+'pythontab'
????print?time()?-?t
def?method2():
????t?=?time()
????for?i?in?xrange(100000):
????????s?=?''.join(['pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab','pythontab'])
????print?time()?-t
method1()
method2()

結果:

1
2
0.641695976257
0.341440916061

?

實驗二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#?-*-?coding:?utf-8?-*-
from?time?import?time
def?method1():
????t?=?time()
????for?i?in?xrange(100000):
????????s?=?'pythontab'+'pythontab'+'pythontab'+'pythontab'
????print?time()?-?t
def?method2():
????t?=?time()
????for?i?in?xrange(100000):
????????s?=?''.join(['pythontab','pythontab','pythontab','pythontab'])
????print?time()?-t
method1()
method2()

結果:

1
2
0.0265691280365
0.0522091388702

?

上面兩個實驗出現了完全不同的結果,分析這兩個實驗唯一不同的是:字符串連接個數。

結論:加號連接效率低是在連續進行多個字符串連接的時候出現的,如果連接的個數較少,加號連接效率反而比join連接效率高

轉載于:https://www.cnblogs.com/chenjingyi/p/5741901.html

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

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

相關文章

算法—遞歸實現 C(m,n)

/* 遞歸實現 C(m,n) */#include "stdio.h" int m,n,s,a[20];int main() {int c(int k);s0; a[0]0;scanf("%d%d",&m,&n);printf("\nC(%d,%d)%d\n",m,n,c(1));}//組合遞歸函數C(k) int c(int k) {int i,j;if(k<n){for(ia[k-1]1;i<m…

九齊51單片機使用注意事項:不要用float

在使用ADC計算電壓值時用了float&#xff0c;NY8B072A堆棧直接炸了&#xff0c;用32機習慣了&#xff0c;一直想不通&#xff0c;查了手冊才知道。 手冊是&#xff1a;《NYC_NY8_UM_v1.5_SC.pdf》 鏈接&#xff1a;https://www.nyquest.com.tw/cn/support/download/Nyquest_SW…

有益的CountDownLatch和棘手的Java死鎖

您是否曾經使用過java.util.concurrent.CountDownLatch &#xff1f; 這是在兩個或多個線程之間實現同步的非常方便的類&#xff0c;在該類中&#xff0c;一個或多個線程可以等待&#xff0c;直到在其他線程中執行的一組操作完成為止&#xff08;請參閱javadoc和此文章 &#x…

算法—回溯法橋本分數式

/* 將1-9九個數不重復地賦給不同的9個元素 &#xff0c;實現形如a/bcd/eff/hi 的形式&#xff1a;例&#xff1a;1/265/784/39 1/325/967/84 &#xff08;注意&#xff1a;1/265/784/39 和5/781/264/39 只能算一種解&#xff09;求滿足條件的解共有多少個&#xff1f; */ #in…

codeforces 703B

題意&#xff1a;有n座城市&#xff0c;其中k座是省會城市&#xff0c;每個城市有對應的點權&#xff0c;城市1-2-3-...-n-1有一條路相連&#xff0c;省會城市與其他所有的城市相連&#xff0c;且每兩個城市間最多有一條路&#xff0c;每條路的邊權為路連接的兩座城市的點權乘積…

go 基準測試 找不到函數_基于Golang做測試

本文在實習期間完成并完善&#xff0c;無任何公司機密&#xff0c;僅做語言交流學習之用。持續更新。1.Golang的單元測試Go語言提供了豐富的單測功能。在Go中&#xff0c;我們通常認為函數是最小的可執行單元。本例中使用兩個簡單的函數&#xff1a;IsOdd和IsPalindrome來進行G…

九齊NY8B072A單片機使用筆記(三)模擬串口RX

因為這款單片機沒有硬件串口&#xff0c;所以需要我們自己做軟件模擬串口。 用PA3作為RX&#xff0c;因為PA3可以作為外部輸入中斷EXTI1。 本人首先用輪詢的方式查PA3是否從高電平跳變到低電平&#xff08;起始信號&#xff09;&#xff0c;但是因為還有別的業務邏輯&#xf…

Java RESTful API集成測試

這篇文章將重點介紹為RESTful API&#xff08;帶有JSON有效負載&#xff09;編寫Java集成測試的基本原理和機制。 目的是對技術進行介紹&#xff0c;并為基本正確性編寫一些測試。 這些示例將使用最新版本的GitHub REST API。 對于內部應用程序&#xff0c;這種測試通常將在持…

java警惕自增的陷阱

public class proposal{public static void main(String[] args) {int count0;for(int i0;i<10;i){countcount;}System.out.println(count);}}結果輸出&#xff1a;0/*步驟一&#xff1a;JMV吧count值&#xff08;其值是0&#xff09;拷貝到臨時變量區&#xff1b;步驟二:co…

[LindCode] Binary Tree Postorder Traversal

Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes values. Example Given binary tree {1,#,2,3}, 1\2/3return [3,2,1]. Challenge Can you do it without recursion? SOLUTION 1: recursion&#xff1a; 分治法解決之&am…

九齊NY8B072A單片機使用筆記(一)TIMER0定時器

先上代碼 //8bit count up , max 0xFF void Ny8b072a_Timer0_Init(void) {PCON1 C_TMR0_Dis; // Disable Timer0//1 * (255 - 5) 250usTMR0 5; // Load 0x00 to TMR0 (Initial Timer0 register)//16M 2T Div8 1usT0MD C_PS0_TMR0 | C_PS0_Div8 ; // Prescaler0 is assign…

python菜鳥教程split_Python split()方法

網頁地址解析&#xff1a; #codingutf-8 str"http://www.runoob.com/python/att-string-split.html" print("0:%s"%str.split("/")[-1]) print("1:%s"%str.split("/")[-2]) print("2:%s"%str.split("/"…

金山毒霸垃圾清理

金山毒霸-垃圾清理-單文件封裝,清潔潔癖的愛好&#xff01; 實話&#xff0c;金山的軟件確實不錯。展望金山可以在軟件行業&#xff0c;做出讓世界都使用的。為國人扛起一片天 下載地址&#xff1a; http://pan.baidu.com/s/1dFa7GdV轉載于:https://www.cnblogs.com/xiaochina/…

并發優化–減少鎖粒度

在高負載多線程應用程序中&#xff0c;性能非常重要。 開發人員必須意識到并發問題才能獲得更好的性能。 當我們需要并發時&#xff0c;我們通常擁有必須由兩個或更多線程共享的資源。 在這種情況下&#xff0c;我們有一個競爭條件 &#xff0c;其中只有一個線程&#xff08;在…

Java1.5增加了新特性:可變參數

/*Java 可變參數Java1.5增加了新特性&#xff1a;可變參數&#xff1a;適用于參數個數不確定&#xff0c;類型確定的情況&#xff0c;java把可變參數當做數組處理。注意&#xff1a;可變參數必須位于最后一項。當可變參數個數多余一個時&#xff0c;必將有一個不是最后一項&…

C語言代碼規范(十)花里胡哨代碼鑒賞

一、宏定義篇 1、作者的目的是防止GPIO口賦值超過1。但是有明顯自覺高人一等&#xff0c;瞧不起讀者的感覺。 uint8_t not_func(uint8_t sw) {return (sw?1:0); }#define LED1(sw) PA12not_func(sw)修改建議&#xff1a; #define LED1 PA12 #define LED_ON 0 #de…

python-break循環中斷

Python break語句&#xff0c;就像在C語言中&#xff0c;打破了最小封閉for或while循環。 break語句用來終止循環語句&#xff0c;即循環條件沒有False條件或者序列還沒被完全遞歸完&#xff0c;也會停止執行循環語句。 break語句用在while和for循環中。 如果您使用嵌套循環&am…

正則表達式驗證六位數以上數字,符號,字母任意兩種混合的密碼驗證策略

^(?![0-9]$)(?![a-zA-Z]$)(?!([^(0-9a-zA-Z)]|[\(\)])$)([^(0-9a-zA-Z)]|[\(\)]|[a-zA-Z]|[0-9]){6,}$這個正則如果是單獨的數字&#xff0c;字符和符號&#xff0c;是不能通過的&#xff0c;少于6位也不行&#xff0c;希望大家可以繼續驗證正確性吧轉載于:https://www.cnbl…

python post請求實例_Python使用requests發送POST請求實例代碼

本文研究的主要是Python使用requests發送POST請求的相關內容&#xff0c;具體介紹如下。 一個http請求包括三個部分&#xff0c;為別為請求行&#xff0c;請求報頭&#xff0c;消息主體&#xff0c;類似以下這樣&#xff1a; 請求行 請求報頭 消息主體 HTTP協議規定post提交的數…

Java Micro-Benchmarking:如何編寫正確的基準

幾個月前&#xff0c;我寫了一篇文章比較循環的短索引的性能 。 我問自己關于使用短褲作為循環迭代次數很少的循環的性能。 在Java語言中&#xff0c;所有對整數的操作都是int進行的。 因此&#xff0c;如果我們使用short作為循環索引&#xff0c;則在每次迭代時都將進行類型轉…