在不同长度的字符串中查找不同的字符

时间:2019-09-12 22:39:33

标签: python

我有一些代码来查找字符串之间的差异。目前,它适用于相同长度的字符串,但我正在尝试使其适用于不同长度的字符串。我该怎么办

我添加了一个新变量longest_seq来尝试解决此问题,但是我不确定如何使用它。

ref_seq = "pandabears"
map_seq = "pondabear"
longest_seq = map_seq

if len(ref_seq) > len(map_seq):
    longest_seq == ref_seq


for i in range(len(longest_seq)):
    if ref_seq[i] != map_seq[i]: 
        print i, ref_seq[i], map_seq[i]

2 个答案:

答案 0 :(得分:2)

对于Python 2,您可以为此使用itertools.izip

from itertools import izip

for i, j in izip(ref_seq, map_seq):
    if i != j: 
        print i, j

输出:

a o

在Python 3中,您可以使用内置的zip函数:

for i, j in zip(ref_seq, map_seq):
    if i != j: 
        print(i, j)

zip在Python 2中存在,但建议使用itertools.izip,因为它会按需生成元组(在每次迭代中都会生成一个新的元组),而不是在Python 3中一次生成所有元组。 ,zip的作用与itertools.izip在Python 2中的作用一样。

答案 1 :(得分:0)

类似的事情应该可以解决。

def different_characters(reference, target):
    # So we don't accidentally index the shorter string past its ending
    ending = min(len(reference), len(target))

    for i in range(ending):
        if reference[i] != target[i]:
            print(i, reference[i], target[i])

    longer_str = reference if len(reference) > len(target) else target
    for i in range(ending, len(longer_str)):
        print(i, longer_str[i], '<empty>')


different_characters('pandabears', 'pondabear')

哪个会打印:

1 a o
9 s <empty>