在我的代码中我遇到了问题,因为我无法按照我的意愿与列表进行比较。我尝试做的是首先寻找输入的第一个索引,然后如果索引不同,寻找较长输入的下一个索引,我猜1。然后在完成比较我要比较第二个指数的元素的第一个指数后,我的意思是首先检查(A-C)(A-A)(A-T)然后(C-A)(C-T)..然后(T-T)...... 并希望输入列表为(A,T),因为猜测1的ATT部分。 然而,我陷入了一刻,我总是发现ACT不是A和T .. 哪里我错了..如果你开导我,我会很高兴..
编辑.. 我想要做的是在较长的guess1列表中寻找最佳的相似性,并找到最相似的列表作为ATT
GUESS1="CATTCG"
GUESS2="ACT"
if len(str(GUESS1))>len(str(GUESS2)):
DNA_input_list=list((GUESS1))
DNA_input1_list=list((GUESS2))
common_elements=[]
i=0
while i<len(DNA_input1_list)-1:
j=0
while j<len(DNA_input_list)-len(DNA_input1_list):
if DNA_input_list[i] == DNA_input1_list[j]:
common_elements.append(DNA_input1_list[j])
i+=1
j+=1
if j>len(DNA_input1_list)-1:
break
print(common_elements)
答案 0 :(得分:1)
据我了解,您希望在较长的子字符串中找到较短的子字符串,如果找不到,则从较短的子字符串中删除一个元素,然后重复搜索。
你可以在python中使用字符串查找功能。即"CATTCG".find('ACT')
,此函数将返回-1,因为没有替代ACT。那么你可以做的是使用切片操作符[::]
从较短的字符串中删除一个元素,并像这样重复搜索 -
>>> for x in range(len('ACT')):
... if "CATTCG".find('ACT'[x:]) > -1 :
... print("CATTCG".find('ACT'[x:]))
... print("Match found for " + 'ACT'[x:])
在这里的代码中,首先生成一系列长度,即[0,1,2,3],这是我们将从头开始切割的项目数。
在第二行我们使用'ACT'进行切片[x:](对于x == 0,我们得到'ACT',对于x == 1,我们得到'CT',对于x == 2,我们得到'T')。
最后两行打印出匹配的位置和字符串。
答案 1 :(得分:0)
如果我已正确理解所有内容,您希望从GUESS2返回最长的类似子字符串,并包含在GUESS1中。
我会用这样的东西。
<!-- language: lang-py -->
for count in range(len(GUESS2)):
if GUESS2[:count] in GUESS1:
common_elements = GUESS2[:count]
print(GUESS2[:count]) #if a function, return GUESS2[:count]
一个循环,只要来自搜索字符串的计数 然后检查子串是否包含在另一个中 如果是这样,将它保存到变量并在循环结束后打印/返回它。