亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算字符串 Python3.6 中子字符串實例的最快方法

計算字符串 Python3.6 中子字符串實例的最快方法

蠱毒傳說 2021-10-19 09:25:34
我一直在開發一個程序,該程序需要計算主字符串(~400,000 個字符)內的子字符串(列表中最多 4000 個 2-6 個字符的子字符串)。我知道這類似于在Counting substrings in a string 中提出的問題,但是,此解決方案對我不起作用。由于我的子字符串是 DNA 序列,我的許多子字符串都是單個字符(例如“AA”)的重復實例;因此,如果我用 'AA' 分割字符串,'AAA' 將被解釋為 'AA' 的單個實例而不是兩個實例。我當前的解決方案是使用嵌套循環,但我希望有一種更快的方法,因為這段代碼對于單個主字符串需要 5 分鐘以上的時間。提前致謝!def getKmers(self, kmer):    self.kmer_dict = {}    kmer_tuples = list(product(['A', 'C', 'G', 'T'], repeat = kmer))    kmer_list = []    for x in range(len(kmer_tuples)):        new_kmer = ''        for y in range(kmer):            new_kmer += kmer_tuples[x][y]        kmer_list.append(new_kmer)    for x in range(len(kmer_list)):        self.kmer_dict[kmer_list[x]] = 0    for x in range(len(self.sequence)-kmer):        for substr in kmer_list:            if self.sequence[x:x+kmer] == substr:                self.kmer_dict[substr] += 1                break    return self.kmer_dict
查看完整描述

2 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

要計算 DNA 的重疊子串,您可以使用 Biopython:


>>> from Bio.Seq import Seq

>>> Seq('AAA').count_overlap('AA')

2

免責聲明:我寫了這個方法,見 commit 97709cc。


但是,如果您正在尋找真正的高性能,Python 可能不是正確的語言選擇(盡管像 Cython 這樣的擴展可能會有所幫助)。


查看完整回答
反對 回復 2021-10-19
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

當然,Python 完全能夠執行這些字符串搜索。但是,與其重新發明您需要的所有輪子,一次一個螺絲,不如使用 Python 中更專業的工具來處理您的問題 - 看起來 BioPython 項目是最積極維護和最完整的來處理這類問題。

帶有類似于您的問題的示例的簡短帖子:https : //dodona.ugent.be/nl/exercises/1377336647/

鏈接到 BioPython 項目文檔:https ://biopython.org/wiki/Documentation

(如果問題只是字符串重疊,那么第 3 方“正則表達式”模塊將是一種方法 - https://pypi.org/project/regex/ - 因為 Pythonre模塊中的內置正則表達式引擎不能處理重疊序列或者)


查看完整回答
反對 回復 2021-10-19
  • 2 回答
  • 0 關注
  • 255 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號