欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python字符串通過(guò)'+'和join函數(shù)拼接新字符串的性能測(cè)試比較

 更新時(shí)間:2019年03月05日 09:36:54   作者:杰瑞26  
今天小編就為大家分享一篇關(guān)于Python字符串通過(guò)'+'和join函數(shù)拼接新字符串的性能測(cè)試比較,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

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

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

上面的代碼其實(shí)可以看出:由于變量str是不變對(duì)象,每次遍歷,Python都會(huì)生成新的str對(duì)象來(lái)存儲(chǔ)新的字符串,所以num越大,創(chuàng)建的str對(duì)象就越多,內(nèi)存消耗約大,速度越慢,性能越差。 如果要改變上面的問(wèn)題,可以變字符串拼接為join聯(lián)合的方式,代碼如下:

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

下面兩種不同處理方式,運(yùn)行速度的比較:

>>> 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
# 運(yùn)行10萬(wàn)級(jí)別數(shù)據(jù),運(yùn)行速度比對(duì)
>>> timeit("strTest1(100000)", setup="from __main__ import strTest1", number=1)
0.016680980406363233
>>> timeit("strTest2(100000)", setup="from __main__ import strTest2", number=1)
0.009688869110618725
# 運(yùn)行100萬(wàn)級(jí)別數(shù)據(jù),運(yùn)行速度比對(duì)
>>> timeit("strTest1(1000000)", setup="from __main__ import strTest1", number=1)
0.14558920607187195
>>> timeit("strTest2(1000000)", setup="from __main__ import strTest2", number=1)
0.1335057276853462
# 運(yùn)行1000萬(wàn)級(jí)別數(shù)據(jù),運(yùn)行速度比對(duì)
>>> timeit("strTest1(10000000)", setup="from __main__ import strTest1", number=1)
5.9497953107860475
>>> timeit("strTest2(10000000)", setup="from __main__ import strTest2", number=1)
1.3268972136649921
# 運(yùn)行2000萬(wàn)級(jí)別數(shù)據(jù),運(yùn)行速度比對(duì)
>>> timeit("strTest1(20000000)", setup="from __main__ import strTest1", number=1)
21.661270140499056
>>> timeit("strTest2(20000000)", setup="from __main__ import strTest2", number=1)
2.6981786518920217
# 運(yùn)行3000萬(wàn)級(jí)別數(shù)據(jù),運(yùn)行速度比對(duì)
>>> timeit("strTest1(30000000)", setup="from __main__ import strTest1", number=1)
49.858089123966295
>>> timeit("strTest2(30000000)", setup="from __main__ import strTest2", number=1)
4.285787770209481
# 運(yùn)行4000萬(wàn)級(jí)別數(shù)據(jù),運(yùn)行速度比對(duì)
>>> timeit("strTest1(40000000)", setup="from __main__ import strTest1", number=1)
86.67876273457563
>>> timeit("strTest2(40000000)", setup="from __main__ import strTest2", number=1)
5.328653452047092
# 運(yùn)行5000萬(wàn)級(jí)別數(shù)據(jù),運(yùn)行速度比對(duì)
>>> timeit("strTest1(50000000)", setup="from __main__ import strTest1", number=1)
130.59138063819023
>>> timeit("strTest2(50000000)", setup="from __main__ import strTest2", number=1)
6.8375931077291625
# 運(yùn)行6000萬(wàn)級(jí)別數(shù)據(jù),運(yùn)行速度比對(duì)
>>> timeit("strTest1(60000000)", setup="from __main__ import strTest1", number=1)
188.28227241975003
>>> timeit("strTest2(60000000)", setup="from __main__ import strTest2", number=1)
8.080144489401846
# 運(yùn)行7000萬(wàn)級(jí)別數(shù)據(jù),運(yùn)行速度比對(duì)
>>> timeit("strTest1(70000000)", setup="from __main__ import strTest1", number=1)
256.54383904350277
>>> timeit("strTest2(70000000)", setup="from __main__ import strTest2", number=1)
9.387400816458012
# 運(yùn)行8000萬(wàn)級(jí)別數(shù)據(jù),運(yùn)行速度比對(duì)
>>> timeit("strTest1(80000000)", setup="from __main__ import strTest1", number=1)
333.7185806572388
>>> timeit("strTest2(80000000)", setup="from __main__ import strTest2", number=1)
10.946627677462857

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • python實(shí)現(xiàn)全排列代碼(回溯、深度優(yōu)先搜索)

    python實(shí)現(xiàn)全排列代碼(回溯、深度優(yōu)先搜索)

    今天小編就為大家分享一篇python實(shí)現(xiàn)全排列代碼(回溯、深度優(yōu)先搜索),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python使用matplotlib.pyplot?as?plt繪圖圖層優(yōu)先級(jí)問(wèn)題

    Python使用matplotlib.pyplot?as?plt繪圖圖層優(yōu)先級(jí)問(wèn)題

    這篇文章主要介紹了Python使用matplotlib.pyplot?as?plt繪圖圖層優(yōu)先級(jí)問(wèn)題.文章圍繞主題展開(kāi)詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • Python處理文件的方法(mimetypes和chardet)

    Python處理文件的方法(mimetypes和chardet)

    這篇文章主要介紹了Python處理文件的方法(mimetypes和chardet),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 用sqlalchemy構(gòu)建Django連接池的實(shí)例

    用sqlalchemy構(gòu)建Django連接池的實(shí)例

    今天小編就為大家分享一篇用sqlalchemy構(gòu)建Django連接池的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • python pandas 時(shí)間日期的處理實(shí)現(xiàn)

    python pandas 時(shí)間日期的處理實(shí)現(xiàn)

    這篇文章主要介紹了python pandas 時(shí)間日期的處理實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python3.7 新特性之dataclass裝飾器

    Python3.7 新特性之dataclass裝飾器

    Python 3.7中一個(gè)令人興奮的新特性是 data classes 。這篇文章主要介紹了Python3.7 新特性之dataclass裝飾器,需要的朋友可以參考下
    2019-05-05
  • Python類和對(duì)象基礎(chǔ)入門介紹

    Python類和對(duì)象基礎(chǔ)入門介紹

    Python 是一種面向?qū)ο蟮木幊陶Z(yǔ)言。Python 中的幾乎所有東西都是對(duì)象,擁有屬性和方法。類(Class)類似對(duì)象構(gòu)造函數(shù),或者是用于創(chuàng)建對(duì)象的藍(lán)圖
    2022-08-08
  • Python爬蟲(chóng)實(shí)現(xiàn)vip電影下載的示例代碼

    Python爬蟲(chóng)實(shí)現(xiàn)vip電影下載的示例代碼

    這篇文章主要介紹了Python爬蟲(chóng)實(shí)現(xiàn)vip電影下載的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 使用Python合并PDF文件并添加自定義目錄及頁(yè)腳的全過(guò)程

    使用Python合并PDF文件并添加自定義目錄及頁(yè)腳的全過(guò)程

    在處理文檔時(shí),我們經(jīng)常遇到需要合并多個(gè)PDF文件并添加目錄及頁(yè)腳的情況,本文將介紹如何使用Python,特別是PyPDF2和reportlab庫(kù)來(lái)實(shí)現(xiàn)這一功能我們將通過(guò)一個(gè)實(shí)用的示例來(lái)演示整個(gè)過(guò)程,需要的朋友可以參考下
    2024-03-03
  • Python3使用PyQt5制作簡(jiǎn)單的畫(huà)板/手寫(xiě)板實(shí)例

    Python3使用PyQt5制作簡(jiǎn)單的畫(huà)板/手寫(xiě)板實(shí)例

    下面小編就為大家?guī)?lái)一篇Python3使用PyQt5制作簡(jiǎn)單的畫(huà)板/手寫(xiě)板實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10

最新評(píng)論