计算字符串Python3.6中子串实例的最快方法

计算字符串Python3.6中子串实例的最快方法,第1张

概述我一直在研究一个程序,它需要在主字符串(~400,000个字符)内计运算符字符串(最多4000个位于列表中的2-6个字符的子字符串).我理解这类似于 Counting substrings in a string提出的问题,但是,这个解决方案对我不起作用.由于我的子字符串是DNA序列,因此我的许多子字符串都是单个字符的重复实例(例如’AA’);因此,如果我将字符串拆分为’AA’,’AAA’将被解释 我一直在研究一个程序,它需要在主字符串(~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 97709cc.

但是,如果你正在寻找真正的高性能,Python可能不是正确的语言选择(尽管像Cython这样的扩展可能有所帮助).

总结

以上是内存溢出为你收集整理的计算字符串Python3.6中子串实例的最快方法全部内容,希望文章能够帮你解决计算字符串Python3.6中子串实例的最快方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1192221.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存