Python将字符串中的多个位置分别切换为多个字母

我正在尝试编写一个Python代码来查找DNA序列中的限制性内切酶位点。限制性内切酶切割特定的 DNA 序列,但有些限制性酶不是那么严格,例如 XmnI 切割此序列:


甘南NTTC


其中 N 可以是任何核苷酸(A、C、G 或 T)。如果我的数学正确的话,那就是 4^4 = 256 个可以剪切的独特序列。我想列出这 256 个短序列,然后对照(较长)输入 DNA 序列检查每个序列。然而,我很难生成 256 个序列。这是我到目前为止所拥有的:


cutsequencequery = "GAANNNNTTC"

Nseq = ["A", "C", "G", "T"]

querylist = []

if "N" in cutsequencequery:

    Nlist = [cutsequencequery.replace("N", t) for t in Nseq]

    for j in list(Nlist):

        querylist.append(j)


for i in querylist:

    print(i)

print(len(querylist))

这是输出:


GAAAAAATTC

GAACCCCTTC

GAAGGGGTTC

GAATTTTTTC

4

所以它将每个 N 切换到 A、C、G 和 T,但我认为我需要另一个循环(或 3?)来生成所有 256 种组合。有没有一种我没有看到的有效方法来做到这一点?


芜湖不芜
浏览 92回答 1
1回答

ITMISS

也许你应该看看python 的 itertools 库,其中包括product它使用可迭代的每个组合创建一个可迭代,因此:from itertools import productcutsequencequery = "GAANNNNTTC"nseq = ["A", "C", "G", "T"]size = cutsequencequery.count('N')possibilities = product(*[nseq for i in range(size)]) # = ('A', 'A', 'A', 'A'), ... , ('T', 'T', 'T', 'T') # len(list(possibilities)) = 256 = 4^4, as expecteds = set()for n in possibilities:    print(''.join(n)) # = 'AAAA', ..., 'TTTT'    new_sequence = cutsequencequery.replace('N' * size, ''.join(n))        s.add(new_sequence)    print(new_sequence) # = 'GAAAAAATTC', ..., 'GAATTTTTTC'print(len(s)) # 256 unique sequences
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python