gpt4 book ai didi

python - 在 python 中引入 DNA 字符串中的突变

转载 作者:太空宇宙 更新时间:2023-11-03 13:21:42 24 4
gpt4 key购买 nike

给定一个 DNA 字符串,例如 AGC。我正在尝试生成所有可能的 uniq 字符串,允许给定字符串中最多 #n(用户定义的数字)不匹配。

我可以通过以下方式针对一个不匹配执行此操作,但无法实现递归解决方案以生成基于#n 不匹配、DNA 字符串和突变集 (AGCTN) 的所有可能组合

temp_dict = {}
sequence = 'AGC'

for x in xrange(len(sequence)):
prefix = sequence[:x]
suffix = sequence[x+1:]
temp_dict.update([ (prefix+base+suffix,1) for base in 'ACGTN'])
print temp_dict

一个例子:

对于给定的样本字符串:ACG,以下是 13 个 uniq 序列,最多允许一个不匹配

{'ACC': 1, 'ATG': 1, 'AAG': 1, 'ANG': 1, 'ACG': 1, 'GCG': 1, 'AGG': 1, 
'ACA': 1, 'ACN': 1, 'ACT': 1, 'TCG': 1, 'CCG': 1, 'NCG': 1}

我想对此进行概括,以便程序可以采用 100 个字符长的 DNA 字符串并返回一个 uniq 字符串列表/字典,允许用户定义#mismatches

谢谢!-阿比

最佳答案

假设我理解你,我想你可以使用 itertools 模块。基本思想是使用 combinations 选择不匹配的位置,然后使用 product 构造所有令人满意的列表:

import itertools

def mismatch(word, letters, num_mismatches):
for locs in itertools.combinations(range(len(word)), num_mismatches):
this_word = [[char] for char in word]
for loc in locs:
orig_char = word[loc]
this_word[loc] = [l for l in letters if l != orig_char]
for poss in itertools.product(*this_word):
yield ''.join(poss)

对于您的示例案例:

>>> mismatch("ACG", "ACGTN", 0)
<generator object mismatch at 0x1004bfaa0>
>>> list(mismatch("ACG", "ACGTN", 0))
['ACG']
>>> list(mismatch("ACG", "ACGTN", 1))
['CCG', 'GCG', 'TCG', 'NCG', 'AAG', 'AGG', 'ATG', 'ANG', 'ACA', 'ACC', 'ACT', 'ACN']

关于python - 在 python 中引入 DNA 字符串中的突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com