python - 如何使 for 循环使用 2 个字符串?

标签 python python-2.7 slice

我有 2 个字符串要比较。问题是我不知道如何同时对两者进行切片,然后在每个切片上运行比较代码。下面是我试图通过在 for 循环中使用 for 循环(每个字符串一个)来运行的代码) 没有出现任何错误,但只有第一个字符串被迭代切片并打印到屏幕上。第二次尝试是将 2 个 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)代码时可以运行。

想要的输出是:

如果 seq1 和 seq2:

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 的更好的解决方案,但老实说,我认为简单的循环是这里最简单的事情。

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)

关于python - 如何使 for 循环使用 2 个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23895795/

相关文章:

arrays - 使用 [..] (slice) 方法引用数组时,Ruby 会创建副本吗?

javascript - Array.prototype.slice.call() 和 wrapper.querySelectorAll() 有什么作用?

python - 有没有更好的方法用 urlopen 做 csv/namedtuple?

python-2.7 - 如何隐藏/删除使用 Kivy 开发的窗口上的默认最小化/最大化按钮?

python - Pandas:当至少 N 个其他 bool 列为 True 时,新的 bool 列

excel - 使用 Python 和 win32com 访问 Excel COM 中的枚举常量

python - 如何在没有强类型的情况下确保可靠的合约?

python - 如何实现 __delitem__ 来处理所有可能的切片场景?

python - 将标题添加到 csv 文件

python - 如何在 Python 中从远程系统检索环境变量?