国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python字符串通過'+'和join函數拼接新字符串的性能測試比較

2020-01-04 13:34:53
字體:
來源:轉載
供稿:網友

有一道Python面試題, 以下代碼有什么局限性,要如何修改

def strTest(num):  s = 'Hello'  for i in range(num):    s += 'x'  return s

上面的代碼其實可以看出:由于變量str是不變對象,每次遍歷,Python都會生成新的str對象來存儲新的字符串,所以num越大,創建的str對象就越多,內存消耗約大,速度越慢,性能越差。 如果要改變上面的問題,可以變字符串拼接為join聯合的方式,代碼如下:

def strTest2(num):  s = 'Hello'  l = list(s)  for i in range(num):    l.append('x')  return ''.join(l)

下面兩種不同處理方式,運行速度的比較:

>>> def strTest1(num):...   s = 'Hello'...   for i in range(num):...     s += 'x'...   return s>>> def strTest2(num):...   s = 'Hello'...   l = list(s)...   for i in range(num):...     l.append(s)...   return ''.join(l)>>>>>> from timeit import timeit# 運行10萬級別數據,運行速度比對>>> timeit("strTest1(100000)", setup="from __main__ import strTest1", number=1)0.016680980406363233>>> timeit("strTest2(100000)", setup="from __main__ import strTest2", number=1)0.009688869110618725# 運行100萬級別數據,運行速度比對>>> timeit("strTest1(1000000)", setup="from __main__ import strTest1", number=1)0.14558920607187195>>> timeit("strTest2(1000000)", setup="from __main__ import strTest2", number=1)0.1335057276853462# 運行1000萬級別數據,運行速度比對>>> timeit("strTest1(10000000)", setup="from __main__ import strTest1", number=1)5.9497953107860475>>> timeit("strTest2(10000000)", setup="from __main__ import strTest2", number=1)1.3268972136649921# 運行2000萬級別數據,運行速度比對>>> timeit("strTest1(20000000)", setup="from __main__ import strTest1", number=1)21.661270140499056>>> timeit("strTest2(20000000)", setup="from __main__ import strTest2", number=1)2.6981786518920217# 運行3000萬級別數據,運行速度比對>>> timeit("strTest1(30000000)", setup="from __main__ import strTest1", number=1)49.858089123966295>>> timeit("strTest2(30000000)", setup="from __main__ import strTest2", number=1)4.285787770209481# 運行4000萬級別數據,運行速度比對>>> timeit("strTest1(40000000)", setup="from __main__ import strTest1", number=1)86.67876273457563>>> timeit("strTest2(40000000)", setup="from __main__ import strTest2", number=1)5.328653452047092# 運行5000萬級別數據,運行速度比對>>> timeit("strTest1(50000000)", setup="from __main__ import strTest1", number=1)130.59138063819023>>> timeit("strTest2(50000000)", setup="from __main__ import strTest2", number=1)6.8375931077291625# 運行6000萬級別數據,運行速度比對>>> timeit("strTest1(60000000)", setup="from __main__ import strTest1", number=1)188.28227241975003>>> timeit("strTest2(60000000)", setup="from __main__ import strTest2", number=1)8.080144489401846# 運行7000萬級別數據,運行速度比對>>> timeit("strTest1(70000000)", setup="from __main__ import strTest1", number=1)256.54383904350277>>> timeit("strTest2(70000000)", setup="from __main__ import strTest2", number=1)9.387400816458012# 運行8000萬級別數據,運行速度比對>>> timeit("strTest1(80000000)", setup="from __main__ import strTest1", number=1)333.7185806572388>>> timeit("strTest2(80000000)", setup="from __main__ import strTest2", number=1)10.946627677462857

從上面的比對數據可以看出,當數據比較小的時候,兩者差別不大,當數據越大,兩者性能差距就越大。從而可以看出,字符串拼接的方式一旦碰到大數據處理的時候,性能是非常慢的。 

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 米易县| 界首市| 万州区| 永胜县| 兴文县| 常宁市| 枣庄市| 建瓯市| 青岛市| 和硕县| 香港| 莒南县| 遂溪县| 靖远县| 汉源县| 望奎县| 永春县| 屏东市| 鹿泉市| 涞源县| 图木舒克市| 涿鹿县| 宝鸡市| 时尚| 长泰县| 托克逊县| 上犹县| 黔西| 海伦市| 延寿县| 孟州市| 筠连县| 闽侯县| 紫金县| 名山县| 上栗县| 泸西县| 夹江县| 牙克石市| 宜黄县| 漾濞|