计算字符串Python3.6中子串实例的最快方法
发布时间:2020-12-20 11:09:24 所属栏目:Python 来源:网络整理
导读:我一直在研究一个程序,它需要在主字符串(~400,000个字符)内计运算符字符串(最多4000个位于列表中的2-6个字符的子字符串).我理解这类似于 Counting substrings in a string提出的问题,但是,这个解决方案对我不起作用.由于我的子字符串是DNA序列,因此我的许多
我一直在研究一个程序,它需要在主字符串(~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 解决方法
要计算DNA的重叠子串,可以使用Biopython:
>>> from Bio.Seq import Seq >>> Seq('AAA').count_overlap('AA') 2 免责声明:我写了这个方法,请参阅commit 但是,如果你正在寻找真正的高性能,Python可能不是正确的语言选择(尽管像Cython这样的扩展可能有所帮助). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |