如何使for循环使用两个字符串?

2024-07-04 05:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个字符串要比较。问题是我不知道如何在同一时间迭代地分割这两个部分,然后在每个部分上运行比较代码切片。在下面是我的代码,我尝试在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

Tags: 字符串代码inforlenifcounterlength
3条回答

我敢肯定,使用高级切片和/或itertools的解决方案有很多,但老实说,我认为简单的循环是最简单的。你知道吗

for i, c in enumerate(seq1):
    try:
        if c != seq2[i]:
            break
        print seq1[:i + 1] + '\n' + seq1[:i + 1]
    except IndexError:
        break
print 'Longest common prefix %s of length %d' % (seq1[:i], i)

尽管来自os.path模块,但是您应该使用os.path.commonprefix来实现这一点。你知道吗

>> s1 = 'GATTACA'
>> s2 = 'GATTCCC'
>> os.path.commonprefix([s1,s2])
'GATT'

实际上,您可以使用zip字符串,这似乎比这里的大多数答案更像python:

str1 = 'ACTGGAG'
str2 = 'ACTA'

prefix = ''
for a,b in zip(str1,str2):
    if a==b:
        prefix += a
    else:
        break

print prefix # prints ACT

相关问题 更多 >

    热门问题