我试图搜索并计算在较大序列(F)内发生的小DNA序列(R)的数量,但R具有可变的几个字符。我能想到的最简单的方法是设置R的比率并计算F中所有命中率超过80%,但似乎只有这样做的命令(例如,difflib的SequenceMatcher或get_close_matches)需要列表上班。我无法将F打入任何此类列表。有什么想法吗?
编辑2:根据要求提供更多信息。
DNA片段(F)中存在一定数量的重复(R)。 F长353个字符,单个重复长15个字符。不会发生重叠,因为R足够明显,不会重叠。问题是R可以变量,15个字符中的2个可以改变或保持不变。我需要能够检测到这些变化以及可能发生的任何未来变化。我试图避免在R中有一个单独的数据库充满了这些变量。变量字符也可能不在同一个位置,所以使用正则表达式如下:
re.findall(pattern = "CTGCTTGGCGGG[TC]T[CG]", string = fragment)
无法运作。此外,这是我通过difflib尝试时使用的内容:
difflib.get_close_matches(repeat, fragment, cutoff = 0.85)
重复是CTGCTTGGCGGGTTC
,DNA片段是AAAATTGCGGCATGTGGGCTGACTCTGAAAGCGATGCTCACGAAAAGGGAACGCGGCGCCGTCGGGCGCCGCGCGCCGCTTAGGACTGCTGGCCTGCGGCCGGCGCCTGCTTGGCGGGTTCCTGCTTGGCGGGCTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTTCCTGCTTGGCGGGCTGCTGCTTGGCGGGCTGCTGGGCCGGCGCCTGCTGGCCAGGAGCGGGCTGCTGGCCGGCAGGCGCCGCGCCCCCCTTGTTCCAGGGCGAAGCCTGCACCGGCGCCCCCGGACGGATCTTCTGGAAGCCTTCGACCACCACCACGTCTCCCGCCGCCAGG
。
重复一遍,我的意思是R在DNA片段中重复多次。
感谢。
答案 0 :(得分:0)
你的问题有点细节,所以我做了一些假设。
如果您可以将F
重写为列表列表,那么您只需计算R的所有可能变体并在import re
from itertools import product
R = [['CTGCTTGGCGGG'] , ['T', 'C'], ['T'], ['C', 'G']]
F = 'AAAATTGCGGCATGTGGGCTGACTCTGAAAGCGATGCTCACGAAAAGGGAACGCGGCGCC' +\
'GTCGGGCGCCGCGCGCCGCTTAGGACTGCTGGCCTGCGGCCGGCGCCTGCTTGGCGGGTT' +\
'CCTGCTTGGCGGGCTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTTCCTGCTTGGCGGGTT' +\
'CCTGCTTGGCGGGCTGCTGCTTGGCGGGCTGCTGGGCCGGCGCCTGCTGGCCAGGAGCGG' +\
'GCTGCTGGCCGGCAGGCGCCGCGCCCCCCTTGTTCCAGGGCGAAGCCTGCACCGGCGCCC' +\
'CCGGACGGATCTTCTGGAAGCCTTCGACCACCACCACGTCTCCCGCCGCCAGG'
for repeat in product(*R):
repeat = ''.join(repeat)
matches = re.findall(repeat, F)
if matches:
print "The repeat '{}' is found {} time(s)".format(repeat, len(matches))
中查找这些变体:
The repeat 'CTGCTTGGCGGGTTC' is found 4 time(s)
The repeat 'CTGCTTGGCGGGCTC' is found 1 time(s)
The repeat 'CTGCTTGGCGGGCTG' is found 2 time(s)
结果如下:
{{1}}