python獲取字母在字母表對應位置的幾種方法及性能對比較
某些情況下要求我們查出字母在字母表中的順序,A = 1,B = 2 , C = 3, 以此類推,例如這題目 https://projecteuler.net/problem=42 其中一步解題步驟就是需要把字母換算成字母表中對應的順序。
取得字母在字母表對應位置的方法,最容易想到的實現的是:
使用str.index 或str.find方法:
In [137]: "ABC".index('B') Out[137]: 1In [138]: "ABC".index('B')+1Out[138]: 2#或者在前面填充一个字符,这样index就直接得到字母序号: In [139]: "_ABC".index("B") Out[139]: 2
我還想到把字母表轉成list或者tuple再index,性能或會有提高? 或是把字母:數字 組成鍵值存到字典是個好辦法?
前兩天我還自己頓悟到了一個方法:
In [140]: ord('B')-64 Out[140]: 2
ord 和chr 都是python中的內置函數,ord可以把ASCII字符轉成對應在ASCII表中的序號,chr則是可以把序號轉成字串。
大寫字母中在表中是從65開始,減掉64剛好是大寫字母在表中的位置。 小寫字母是從97開始,減於96就是對應的字母表位置。
哪種方法可能在性能上更好?我寫了程式碼來測試一下:
az = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"_az = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ"azlist = list(az) azdict = dict(zip(az,range(1,27))) text = az*1000000 #这个是测试数据#str.find和str.index的是一样的。这里就没必要写了。def azindexstr(text): for r in text: az.index(r)+1 passdef _azindexstr(text): for r in text: _az.index(r) passdef azindexlist(text): for r in text: azlist.index(r) passdef azindexdict(text): for r in text: azdict.get(r) passdef azindexdict2(text): for r in text: azdict[r] passdef azord(text): for r in text: ord(r)-64 passdef azand64(text): for r in text: ord(r)%64 pass
把上面的程式碼複製貼上到ipython ,然後用魔法函數%timeit測試各個方法的效能。 ipython 是一個python互動解釋器,附帶各種很實用的功能,例如文字主要到的%timeit 功能。 請輸入pip install ipython安裝.
以下是我測試的結果資料:
In [147]: %timeit azindexstr(text) 1 loop, best of 3: 9.09 s per loop In [148]: %timeit _azindexstr(text) 1 loop, best of 3: 8.1 s per loop In [149]: %timeit azindexlist(text) 1 loop, best of 3: 17.1 s per loop In [150]: %timeit azindexdict(text) 1 loop, best of 3: 4.54 s per loop In [151]: %timeit azindexdict2(text) 1 loop, best of 3: 1.99 s per loop In [152]: %timeit azord(text) 1 loop, best of 3: 2.94 s per loop In [153]: %timeit azand64(text) 1 loop, best of 3: 4.56 s per loop
從結果中可見到list.index速度最慢,我很驚訝。另外如果list中數據很多,index會慢得很嚴重。 dict[r]的速度比dict.get(r)的速度快,但是如果是一個不存在的鍵dict[r]會報錯,而dict.get方法不會報錯,容錯性更好。
ord(r)-64的方法速度不錯,使用起來應該也是最方便,不用建構資料。

theDifferenceBetweewneaforoopandawhileLoopInpythonisthataThataThataThataThataThataThataNumberoFiterationSiskNownInAdvance,而leleawhileLoopisusedWhenaconDitionNeedneedneedneedNeedStobeCheckedStobeCheckedStobeCheckedStobeCheckedStobeceDrepeTysepectients.peatsiveSectlyStheStobeCeptellyWithnumberofiterations.1)forloopsareAceareIdealForitoringercortersence

在Python中,for循環適用於已知迭代次數的情況,而while循環適合未知迭代次數且需要更多控制的情況。 1)for循環適用於遍歷序列,如列表、字符串等,代碼簡潔且Pythonic。 2)while循環在需要根據條件控制循環或等待用戶輸入時更合適,但需注意避免無限循環。 3)性能上,for循環略快,但差異通常不大。選擇合適的循環類型可以提高代碼的效率和可讀性。

在Python中,可以通過五種方法合併列表:1)使用 運算符,簡單直觀,適用於小列表;2)使用extend()方法,直接修改原列表,適用於需要頻繁更新的列表;3)使用列表解析式,簡潔且可對元素進行操作;4)使用itertools.chain()函數,內存高效,適合大數據集;5)使用*運算符和zip()函數,適用於需要配對元素的場景。每種方法都有其特定用途和優缺點,選擇時應考慮項目需求和性能。

foroopsare whenthenemberofiterationsisknown,而whileLoopsareUseduntilacTitionismet.1)ForloopSareIdealForeSequencesLikeLists,UsingSyntaxLike'forfruitinFruitinFruitinFruitIts:print(fruit)'。 2)'

toConcateNateAlistofListsInpython,useextend,listComprehensions,itertools.Chain,orrecursiveFunctions.1)ExtendMethodStraightForwardButverBose.2)listComprechencomprechensionsareconconconciseandemandeconeandefforlargerdatasets.3)

Tomergelistsinpython,YouCanusethe操作員,estextMethod,ListComprehension,Oritertools

在Python3中,可以通過多種方法連接兩個列表:1)使用 運算符,適用於小列表,但對大列表效率低;2)使用extend方法,適用於大列表,內存效率高,但會修改原列表;3)使用*運算符,適用於合併多個列表,不修改原列表;4)使用itertools.chain,適用於大數據集,內存效率高。

使用join()方法是Python中從列表連接字符串最有效的方法。 1)使用join()方法高效且易讀。 2)循環使用 運算符對大列表效率低。 3)列表推導式與join()結合適用於需要轉換的場景。 4)reduce()方法適用於其他類型歸約,但對字符串連接效率低。完整句子結束。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。