我有一些代码来查找字符串之间的差异。目前,它适用于相同长度的字符串,但我正在尝试使其适用于不同长度的字符串。我该怎么办
我添加了一个新变量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]
答案 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>