gpt4 book ai didi

python计算序列列表中子字符串的存在和不存在的数量

转载 作者:太空狗 更新时间:2023-10-29 22:22:43 29 4
gpt4 key购买 nike

你可以在这里获取数据! 2shared底部下载

我正在使用 Python 分析生物数据。

我写下了一段代码,用于在长字符串列表的列表中查找匹配的子字符串。

子字符串在列表中,长度为 7 个核苷酸。

因此在列表中,从 AAAAAAA 到 TTTTTTT,存在 16384 个基序(子串),排列 A、C、G、T。

此代码有一个 for 循环,用于子字符串列表和嵌套在其中的长字符串列表列表。

它工作正常,但由于 list of lists 有 12000 行,代码处理速度非常慢。

换句话说,提供有关 AAAAAAA 的信息以及下一个 AAAAAAC 的信息需要 2 分钟。

所以需要 16384 个图案才能通过 12000 行 2 分钟,需要 (16384*2 == 32768 分钟 -> 546 小时 -> 22 天...)

我正在使用 scipy 和 numpy 来获取 Pvalues。

我想要的是计算序列列表中子字符串的存在和不存在的数量

长字符串的列表和代码是这样的:

list_of_lists_long  =  [
[BGN, -0.054, AGGCAGCTGCAGCCACCGCGGGGCCTCAGTGGGGGTCTCTGG....]
[ABCB7, 0.109, GTCACATAAGACATTTTCTTTTTTTGTTGTTTTGGACTACAT....]
[GPR143, -0.137, AGGGGATGTGCTGGGGGTCCAGACCCCATATTCCTCAGACTC....]
[PLP2, -0.535, GCGAACTTCCCTCATTTCTCTCTGCAATCTGCAAATAACTCC....]
[VSIG4, 0.13, AAATGCCCCATTAGGCCAGGATCTGCTGACATAATTGCCTAG....]
[CCNB3, -0.071, CAGCAGCCACAGGGCTAAGCATGCATGTTAACAGGATCGGGA....]
[TCEAL3, 0.189, TGCCTTTGGCCTTCCATTCTGATTTCTCTGATGAGAATACGA....]
....] #12000 lines

有没有更快的逻辑来更快地执行代码??

我需要你的帮助!

提前谢谢你。

=====================================

有没有更简单的方法,无需执行任何其他操作?

我认为模式匹配的迭代是问题...

我试图找到的是长度为 7 的基序在整个序列列表中出现了多少次,但也没有出现!!!。因此,如果一个主题出现在一个字符串中,它是 TRUE 作为 bool,然后增加一个值和 FALSE,然后增加另一个值。

不是字符串中的图案数量。

最佳答案

好问题。这是一个经典的计算机科学问题。是的,确实有更好的算法。您的处理每个长字符串 16384 次。更好的方法是只处理每个长字符串一次。

与其在每个长字符串中搜索每个主题,不如只记录每个长字符串中出现了哪些主题。例如,如果您在以下字符串中搜索长度为 2 的基序:

s = 'ACGTAC'

然后你可以在长度为 2 的子字符串上运行一个循环,并记录哪些子字符串出现在 dict 中:

motifAppearances = {}
for i in range(len(s)-1):
motif = s[i:i+2] # grab a length=2 substring
if motif not in motifAppearances:
motifAppearances[motif] = 0 # initialize the count
motifAppearances[motif] += 1 # increment the count

现在您已经对整个字符串进行了恰好一次处理,并找到了其中存在的所有图案。在这种情况下,生成的字典将如下所示:

motifAppearances = {'AC':2, 'CG':1, 'GT':1, 'TA':1}

为您的案例做类似的事情应该可以将您的运行时间减少 16384 倍。

关于python计算序列列表中子字符串的存在和不存在的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20020445/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com