如何使用while循环搜索两个整数中的公共元素

时间:2015-12-08 20:30:39

标签: python algorithm list while-loop

在我的代码中我遇到了问题,因为我无法按照我的意愿与列表进行比较。我尝试做的是首先寻找输入的第一个索引,然后如果索引不同,寻找较长输入的下一个索引,我猜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)

2 个答案:

答案 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]

一个循环,只要来自搜索字符串的计数 然后检查子串是否包含在另一个中 如果是这样,将它保存到变量并在循环结束后打印/返回它。