为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

芜湖不芜 2023-12-09 16:01:53
我正在尝试编写一个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


查看完整回答
反对 回复 2023-12-09
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信