如何使用循环来比较序列?

时间:2014-10-09 03:09:52

标签: python

我正在尝试比较两个序列a和b,并编写打印出这些不匹配位置的代码。我知道下面的代码不正确,但它是我能为此而来的最接近的代码。我觉得我误解了流动的概念。任何帮助将不胜感激。感谢。

a="CATCGTCCT"
b="CACCGACCG"
mismatch_seq=[]
for x in list(a):
    mismatch=[]
    if x!=x in list(b):
        mismatch+=x in list(b)
        mismatch_seq.append(mismatch)
    else:
       pass
print mismatch_seq

编辑:另外,你如何编写代码告诉你,在索引方面,这种不匹配发生在哪里?

4 个答案:

答案 0 :(得分:1)

只是做:

a="CATCGTCCT"
b="CACCGACCG"
mismatch_seq=[]
for x in range (0, len(a)):
    if a[x] !=  b[x]:
        mismatch_seq.append(x)
print mismatch_seq

答案 1 :(得分:1)

受上述答案的启发,此list comprehension会查看ba中存在相应字符的字符,如果这些字符不相等,则会返回其索引i

a = "CATCGTCCT"
b = "CACCGACCG"

mismatch = [i for i in range(0, len(a)) if a[i] != b[i]]

for pos in mismatch:
    print "At position", pos, "a had", a[pos], "while b had", b[pos], "."

mismatch的等效循环代码,如this answer

for i in range(0, len(a)):
    if a[i] != b[i]:
        mismatch.append(i)

答案 2 :(得分:1)

您可以使用以下内容:

>>> filter(lambda m: m[1][0] != m[1][1] , enumerate(zip(a, b)))
[(2, ('T', 'C')), (5, ('T', 'A')), (8, ('T', 'G'))]

我建议使用izip。这样你可以放入任意长的整个文件,然后可以安全地将输出发送到文件......

答案 3 :(得分:0)

简单的代码可能会使用此

a = "CATCGTCCT"                                             # SET a
b = "CACCGACCG"                                             # SET b

aListOfMismatchPOSITIONs = []                               # SET aList

for charPTR in range( len( a ) ):                           # LOOP over len( a )
    if  a[charPTR] != b[charPTR]:                           # .NE.
        aListOfMismatchPOSITIONs.append( charPTR)           #     APPEND
    else:                                                   # ELSE
        continue                                            #     LOOP^

print "A sequence of non-matching positions = ", aListOfMismatchPOSITIONs