我有两个字符串要比较。问题是我不知道如何在同一时间迭代地分割这两个部分,然后在每个部分上运行比较代码切片。在下面是我的代码,我尝试在for循环中使用for循环(每个字符串对应一个)来运行它,它没有出现任何错误,但只有第一个字符串被迭代地切片并打印到屏幕上。第二次尝试是将两个for循环合并在一起,但是出现了错误消息,这清楚地解释了失败的原因,但是我不知道解决这个错误的方法。你知道吗
for循环中的for循环代码
for i in range(8, len(seq1)):
seq1i = seq1[0:i]
print seq1i
for i in range(8,len(seq2)):
seq2i = seq2[0:i]
print seq2i
for c1, c2 in zip(seq1i, seq2i):
if c1 == c2:
counter += 1
else:
break
print "String share the longest common prefix of length %d: %s" % (counter, seq1[:counter])
if counter >= 8:
print " Match found, match length %d" % counter
尝试合并for循环:
for i1,i2 in range(8,len(seq1, seq2)):
for c1, c2 in zip(seq1i, seq2i):
if c1 == c2:
counter += 1
else:
break
print "String share the longest common prefix of length %d: %s" % (counter, seq1[:counter])
if counter >= 8:
print " Match found, match length %d" % counter
这导致了错误:
TypeError Traceback (most recent call last)
<ipython-input-26-9c4822069792> in <module>()
----> 1 for i1,i2 in range(8,len(seq1, seq2)):
2 for c1, c2 in zip(seq1i, seq2i):
3 if c1 == c2:
4 counter += 1
5 else:
TypeError: len() takes exactly one argument (2 given)
我认为必须有一种方法,在这种方法中,字符串的每个迭代切片都将发生,并且当它们被生成时,匹配的(如果c1==c2)代码可以运行。你知道吗
想要的结果是:
如果序列1和序列2:
seq1 = 'ATCGATCGATCGAAAA'
seq2 = 'ATCGATCGATCCCCCC'
A
A
AT
AT
ATC
ATC
ATCG
ATCG
ATCGA
ATCGA
ATCGAT
ATCGAT
ATCGATC
ATCGATC
ATCGATCG
ATCGATCG
ATCGATCGA
ATCGATCGA
ATCGATCGAT
ATCGATCGAT
ATCGATCGATC
ATCGATCGATC
String share the longest common prefix of length 10:ATCGATCGATC
我敢肯定,使用高级切片和/或itertools的解决方案有很多,但老实说,我认为简单的循环是最简单的。你知道吗
尽管来自
os.path
模块,但是您应该使用os.path.commonprefix
来实现这一点。你知道吗实际上,您可以使用
zip
字符串,这似乎比这里的大多数答案更像python:相关问题 更多 >
编程相关推荐