我需要编写一个脚本,该脚本将循环序列列表,找到它们之间的共享图案(不同图案可能存在多种解决方案)并打印所有序列之间共享的该图案。
在下面的例子中
链 = ['GATTACA', 'TAGACCA', 'ATACA']
AT
是共享主题之一。我将感谢此类任务的任何解决方案,包括 BioPython 函数的使用。
最近我制作了一个脚本,它为较短的序列循环相同的集合,将其设置为引用,然后尝试在其他链的每个位置中找到该引用序列。但我真的不知道如何在不定义引用的情况下找到共享主题
# reference
xz=" ".join(chains)
ref= min(xz.split(), key=len)
# LOOKING FOR THE MOTIFS
for chain in chains:
for i in range(len(chain)):
if chain==ref:
pass
elif ref not in chain:
print "%s has not been found in the %s"%(ref, chain)
break
elif chain[i:].startswith(ref):
print "%s has been detected in %s in the %d position" %(ref, chain, i+1)
这只是一个快速的想法。你必须改进它,因为它几乎搜索所有空间。我希望它会有所帮助。
def cut_into_parts(chain, n):
return [chain[x:x+n] for x in range(0, len(chain)-n)]
def cut_chains(chains, n):
rlist = []
for k,v in enumerate(chains):
rlist.extend(cut_into_parts(chains, n))
return rlist
def is_str_common(str, chains):
for k,v in enumerate(chains):
if !chains[k].contains(str):
return false
return true
def find_best_common(chains):
clist = []
for i in inverse(range(0, len(chains)))://inverse - I dont remmeber exactly the name of func
clist.extend(cut_chains(chains, i))
for k, v in enumerate(clist):
return is_str_common(clist[k], chains)
我是一名优秀的程序员,十分优秀!