Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 检查和计数Python中字符串中是否存在给定子字符串的有效方法_Python 3.x_String_Count_Substring - Fatal编程技术网

Python 3.x 检查和计数Python中字符串中是否存在给定子字符串的有效方法

Python 3.x 检查和计数Python中字符串中是否存在给定子字符串的有效方法,python-3.x,string,count,substring,Python 3.x,String,Count,Substring,我有几个fasta文件(大约40个),其中有大量的序列(每个序列超过100000个)。我想做的是检查一个给定的字符串是否存在于不同的序列中,以及它是否计入了多少。比如说, >序列1 考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加 Auacuaguugucuuucacuuauugaacguugcgugcagagaauuuuugugaua UAUCAAAAA >序列2 CGCAGAUGAGAUUGUGC

我有几个fasta文件(大约40个),其中有大量的序列(每个序列超过100000个)。我想做的是检查一个给定的字符串是否存在于不同的序列中,以及它是否计入了多少。比如说,

>序列1 考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加考加 Auacuaguugucuuucacuuauugaacguugcgugcagagaauuuuugugaua UAUCAAAAA

>序列2 CGCAGAUGAGAUUGUGCGCCCUUGCCUCUCUGUAAGGUGUGUGGAAGCGCACCU CCCCAGUGUCUCCCGGACUGUAGCCCAAUCGAUGUAAUCACACACAUGUGG 乌库奥古

如果我想计算具有aaaaaaaaa的序列数,我应该得到1,因为它只存在于两个序列中的一个序列中

为了搜索字符串,我尝试了Boyer-moore-horspool和Knuth-Morris-Pratt算法。问题是我有一个需要检查的20000个字符串的列表,这意味着对于每个字符串,它必须检查400000多个序列。在我的代码中,我使用循环,我使用数据的方式使我使用了3个缩进的循环,我知道这太多了:

for w in words: 
    for x in list_files:
        with open(directory ,"r") as f:
           for seq_record in SeqIO.parse((directory), "fasta"):

我如何组织我的数据以使其更高效,或者是否有其他方法可以做到这一点?

在相对较高的级别上,我会:

  • 使用
    functools.partial
    concurrent.futures
    组合使用
    ThreadpoolExecutor
  • 使用cython/Boost.python/pybind11编写BMH的实现,并将其导入python(这将防止用python编写内部循环构造)

  • 为什么不在中使用函数甚至
    ,而不是编写自己的字符串搜索函数?我希望这些方法能在biopython中得到很好的应用。使用正则表达式作为正则表达式模式搜索多个目标字符串可能会提高搜索性能。此外,我还将考虑使用该模块在多个处理器上分配工作。您将使用一个工作人员池来处理文件的子集,然后在每个子流程返回结果时对结果进行整理。