我正在尝试比较两个序列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
编辑:另外,你如何编写代码告诉你,在索引方面,这种不匹配发生在哪里?
答案 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会查看b
中a
中存在相应字符的字符,如果这些字符不相等,则会返回其索引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