required_function() 所需的函式呼叫和輸出應如下所示:
>>> print(required_function("1112211000022", "1"))
0
>>> print(required_function("1112211000022", "11"))
1
>>> print(required_function("1112211000022", "111"))
1
>>> print(required_function("1112211000022", "0"))
0
>>> print(required_function("1112211000022", "00"))
0
>>> print(required_function("1112211000022", "0000"))
1
>>> print(required_function("1112211000022", "22"))
2
讓我們試試 python 的 count() 函式,但它使用搜索子字串的最小匹配長度提取非重疊計數。
"1112211000022".count('11') #returns 2 but desired output is 1 because "11" is present only once.
"1112211000022".count('1') #returns 5 but desired output is 0 because "1" is not present.
"1112211000022".count('0') #returns 4 but desired output is 0 because "0" is not present.
目標:此功能有助于計算蛋白質序列中氨基酸的出現次數。我也在嘗試撰寫一個高效的代碼,我完成后會盡快分享。該函式應該具有時間效率,因為在與單個物種相關的單個檔案中將有大約 50,000 個平均長度為 250 的蛋白質序列。
uj5u.com熱心網友回復:
如果您要進行此類分析,您應該精通正則運算式。它們是分析此類序列的常用工具。您當前的問題很容易通過使用負前瞻/后視設定正則運算式來輕松處理,該正則運算式查找不跟隨且不跟隨模式中字符的目標。一種方法是:
import re
def required_function(s, t):
c = t[0]
rx = re.compile(f'(?<!{c}){t}(?!{c})')
return len(rx.findall(s))
assert(0 == required_function("1112211000022", "1"))
assert(1 == required_function("1112211000022", "11"))
assert(1 == required_function("1112211000022", "111"))
assert(0 == required_function("1112211000022", "0"))
assert(0 == required_function("1112211000022", "00"))
assert(1 == required_function("1112211000022", "0000"))
assert(2 == required_function("1112211000022", "22"))
這將在幾毫秒內處理 50,000 個示例,并且可以通過明智地重新使用已編譯的正則運算式來改進。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400221.html
上一篇:線性回歸和隨機狀態
下一篇:為什么它將輸出回傳為n
