如何优化运行4**k次的python脚本?

2024-09-29 22:09:48 发布

您现在位置:Python中文网/ 问答频道 /正文

编程语言:Python3.4

我为Coursera的生物信息学1课程编写了一个程序。该程序运行正常,但对于大数据集,非常慢。我想,这是因为循环运行了4**k次,其中k是传递给函数的子字符串的长度。 输入:字符串文本模式以及整数d。 输出:所有起始位置,其中Pattern显示为最多不匹配d的文本子串。在

这是我的代码:

def MotifCount(string1, substring, d):
    k = 4 ** (len(substring))
    codeArray = list(itertools.product(['A', 'C', 'G', 'T'], repeat=len(substring)))
    for i in range(k):
        codeArray2 = ''.join(list(codeArray[i]))
        HammingValue = HammingDistance(codeArray2, substring)
        if HammingValue <= d:
            for j in range(len(string1)):
                if(string1.find(codeArray2, j) == j):
                    print(j)



def HammingDistance(string_1, string_2):
    length_1 = len(string_1)
    length_2 = len(string_2)
    count = 0
    for i in range(length_1):
        if string_1[i] != string_2[i]:
            count += 1
    return count

样本输入:

^{pr2}$

输出:

^{3}$

我想为更大的数据集优化这段代码。有什么方法可以减少代码的运行时间吗?在


Tags: 数据字符串代码in文本forstringlen
1条回答
网友
1楼 · 发布于 2024-09-29 22:09:48
import itertools

def HammingDistance(string_1, string_2):
    assert len(string_1) == len(string_2)
    return sum(c1 != c2 for c1, c2 in zip(string_1, string_2))

def MotifCount(string1, substring, d):
    for i in range(len(string1) - len(substring) + 1):
        if HammingDistance(string1[i:i+len(substring)], substring) <= d:
            print(i)

MotifCount("CGCCCGAATCCAGAACGCATTCCCATATTTCGGGACCACTGGCCTCCACGGTACGGACGTCAATCAAAT", "ATTCTGGA", 3)

它提供:

^{pr2}$

快点。在

相关问题 更多 >

    热门问题