首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何优化运行4**k次的python脚本?

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

Stack Overflow用户
提问于 2015-06-27 07:13:26
回答 1查看 166关注 0票数 8

编程语言:Python3.4

我已经写了一个程序,为生物信息学1课程从库瑟拉。该程序运行良好,但对于大型数据集来说非常慢。我想,这是因为循环运行了4**k次,其中k是传递给函数的子字符串的长度。输入:字符串、文本和模式以及整数d。输出:模式作为文本的子字符串出现的所有起始位置,最多不匹配d。

这是我的密码:

代码语言:javascript
运行
复制
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

示例输入:

代码语言:javascript
运行
复制
CGCCCGAATCCAGAACGCATTCCCATATTTCGGGACCACTGGCCTCCACGGTACGGACGTCAATCAAAT
ATTCTGGA
3

输出:

代码语言:javascript
运行
复制
6 7 26 27

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-27 08:32:53

代码语言:javascript
运行
复制
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)

它规定:

代码语言:javascript
运行
复制
6
7
26
27

快点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31086204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档