我正在尝试编写一个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))这是输出:GAAAAAATTCGAACCCCTTCGAAGGGGTTCGAATTTTTTC4所以它将每个 N 切换到 A、C、G 和 T,但我认为我需要另一个循环(或 3?)来生成所有 256 种组合。有没有一种我没有看到的有效方法来做到这一点?
1 回答
ITMISS
TA贡献1871条经验 获得超8个赞
也许你应该看看python 的 itertools 库,其中包括product
它使用可迭代的每个组合创建一个可迭代,因此:
from itertools import product
cutsequencequery = "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 expected
s = 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
添加回答
举报
0/150
提交
取消