join和 的區別

2022-08-13 03:18:17 字數 1702 閱讀 9911

連線字串的時候可以用join也可以用+,但這兩者有沒有區別呢?

我們先來看一下用join和+連線字串的例子

str1 = " ".join(["hello", "world"])

str2 = "hello " + "world"

print(str1) # 輸出 「hello world"

print(str2) # 輸出 「hello world"

兩者的結果是一樣,那麼考慮這樣乙個問題,這兩者在效能上有區別嗎?

我們來做個實驗,比較下join和+的效能

import timeit,time

def test1(strlist):

return "".join(strlist)

def test2(strlist):

result = ""

for v in strlist:

result = result+v

return result

if __name__ == "__main__":

strlist = ["a very very very very very very very long string" for n in range(1000)]

timer1 = timeit.timer("test1(strlist)", "from __main__ import strlist, test1")

timer2 = timeit.timer("test2(strlist)", "from __main__ import strlist, test2")

time1 = timer1.timeit(number=100)

time2 = timer2.timeit(number=100)

print("join: %f, plus: %f" % (time1, time2))

strlist1 = ["very very very long long" ,"very long long long","very long long long","very long long long","very long long long"]

time1 = time.time()

for i in range(100000):

test1(strlist1)

time2 = time.time()

time3 = time.time()

for i in range(100000):

test2(strlist1)

time4 = time.time()

print ("join:%s" %(time2-time1))

print("+ :%s" % (time4-time3))

輸出:

join: 0.003507, plus: 0.083788

join:0.18189620971679688

+ :0.3727850914001465

可以看到,join的效能明顯好於+。這是為什麼呢?

原因是這樣的,字串是不可變物件,當用操作符+連線字串的時候,每執行一次+都會申請一塊新的記憶體,因此用+連線字串的時候會涉及好幾次記憶體申請和複製。而join在連線字串的時候,會先計算需要多大的記憶體存放結果,然後一次性申請所需記憶體並將字串複製過去,這是為什麼join的效能優於+的原因。所以在連線字串陣列的時候,我們應考慮優先使用join

split 和join 的區別

join函式獲取一批字串,然後用分隔符字串將它們連線起來,從而返回乙個字串。split 函式獲取乙個字串,然後在分隔符處將其斷開,從而返回一批字串。但是,這兩個函式之間的區別在於join可以使用任何分割字串將多個字串連線起來,而split 只能使用乙個字元分隔符將字串斷開。簡單地說,如果你用spli...

join和split的區別

join 方法用於把陣列中的所有元素放入乙個字串。元素是通過指定的分隔符進行分隔的。如下 split a,b 方法 用於把乙個字串分割成字串陣列.a是必須的,決定個從a這裡開始分割 b不是必須的,可選。該引數可指定返回的陣列的最大長度 如果設定了該引數,返回的子串不會多於這個引數指定的陣列。如果沒有...

MySQL中exists和join的區別

今天在公司專案中發現call一條api的資料,居然要4.9s,通過檢視其sql語句以及網上查詢相關資料,發現是 exists和join的區別 select t.from topic t where 1 1 and t.rel type g and exists select 1 from user ...