我在读this post,我想知道是否有人能找到方法将重复的主题捕捉成更复杂的字符串。在
例如,在
string = 'AAACACGTACGTAATTCCGTGTGTCCCCTATACGTATACGTTT'
这里重复的主题: “AAACACGTACGTAATTCCGTGTGTCCCCTATACGTTT”
所以,输出应该是这样的:
^{pr2}$这个例子来自一种被称为微卫星的典型生物现象,它存在于DNA中。在
更新1:已从字符串变量中删除星号。这是个错误。在
更新2:单字符主题不算在内。例如:在ACGUGAAAGUC中,不考虑“A”基序。在
如果可以绑定查询,则可以使用字符串的单次传递。比较的数量将是
length of string * (max_length - min_length)
,因此将线性缩放。在输出:
^{pr2}$请注意,这比regexp的答案捕捉到更多的重叠模式,但是如果不了解您认为的好的匹配,就很难进一步减少它,例如,
TATACG
比ATACGT
好?在附加:使用dict返回匹配项是个坏主意,因为模式不是唯一的。在
可以使用如下递归函数:
注意:result参数将被视为全局变量(因为向函数传递可变对象会影响调用方)
结果:
^{pr2}$以下字符串的上一个问题的答案:
您可以使用来自mentioned question的答案和一些额外的配方:
首先可以使用
**
拆分字符串,然后创建一个新列表,其中包含使用r'(.+)\1+'
regex重复的字符串:所以结果是:
注意,关于
'ACGTACGT'
在结尾错过了A
的内容!在然后可以使用
principal_period
的函数来获取重复的子字符串:因此,
l
中有重复的字符串,sub
中有主字符串:然后您需要一个
region
,您可以使用span
方法来完成:最后,您可以压缩3个列表
regon
,sub
,l
,并使用dict理解来创建预期结果:主要代码:
这个简单的while循环检测所有重复的模式:
此时,
^{pr2}$motifs
包含所有重复的模式。。。让我们用一些标准来筛选它们:相关问题 更多 >
编程相关推荐