我编写了这个野蛮的脚本来创建字符串的排列,该字符串在字符串中所有可能的位置组合中包含 n(最多 n = 4)$。我最终会.replace('$','(\\w)')
用于 dna 搜索序列中的不匹配。由于我编写脚本的方式,某些排列少于请求的 $ 数量。然后我编写了一个脚本来删除它们,但它似乎并不有效,并且每次我运行删除脚本时,它都会删除更多不需要的排列。在下面粘贴的代码中,您将看到我使用一个包含 4 个不匹配的简单序列来测试该函数。然后我运行一系列删除脚本,计算每次删除了多少表达式……根据我的经验,删除所有通配符 $ 少于 4 个的表达式大约需要 8 次。我对此有几个问题:
是否有用于搜索“n”不匹配的内置函数?甚至在 biopython 中?到目前为止,我已经看到了 Paul_McGuire_regex 函数:
Search for string allowed for one mismatch in any location of the string,
这似乎只会产生 1 个不匹配。我必须承认,我并不完全理解该页面上剩余功能中的所有代码,因为我是一个非常新的编码器。由于我认为这对我来说是一个很好的练习,有没有更好的方法来编写整个脚本?...我可以根据需要多次迭代 Paul_McGuire_regex 函数吗?
最让我困惑的是,为什么删除脚本第一次不能 100% 工作?
感谢您的任何帮助,您可以提供!
def Mismatch(Search,n):
List = []
SearchL = list(Search)
if n > 4:
return("Error: Maximum of 4 mismatches")
for i in range(0,len(Search)):
if n == 1:
SearchL_i = list(Search)
SearchL_i[i] = '$'
List.append(''.join(SearchL_i))
if n > 1:
for j in range (0,len(Search)):
if n == 2:
SearchL_j = list(Search)
SearchL_j[i] = '$'
SearchL_j[j] = '$'
List.append(''.join(SearchL_j))
if n > 2:
for k in range(0,len(Search)):
if n == 3:
SearchL_k = list(Search)
SearchL_k[i] = '$'
SearchL_k[j] = '$'
SearchL_k[k] = '$'
List.append(''.join(SearchL_k))
if n > 3:
for l in range(0,len(Search)):
if n ==4:
SearchL_l = list(Search)
SearchL_l[i] = '$'
SearchL_l[j] = '$'
SearchL_l[k] = '$'
SearchL_l[l] = '$'
List.append(''.join(SearchL_l))
counter=0
for el in List:
if el.count('$') < n:
counter+=1
List.remove(el)
return(List)
List_RE = Mismatch('abcde',4)
counter = 0
for el in List_RE:
if el.count('$') < 4:
List_RE.remove(el)
counter+=1
print("Filter2="+str(counter))