我正在尝试计算两个导入字符串(seq1和seq2,未列出的导入代码)之间的差异数量,但在运行程序时没有得到任何结果.我希望输出读取类似"2差异"的内容.不知道我哪里错了...
def difference (seq1, seq2):
count = 0
for i in seq1:
if seq1[i] != seq2[i]:
count += 1
return (count)
print (count, "differences")
Run Code Online (Sandbox Code Playgroud)
Rya*_*ing 12
你可以用生成器表达式完全平坦地做到这一点
count = sum(1 for a, b in zip(seq1, seq2) if a != b)
Run Code Online (Sandbox Code Playgroud)
如果序列的长度不同,那么你可以认为长度的差异是内容的差异(我愿意).在这种情况下,标记一个额外的部分来解释它
count = sum(1 for a, b in zip(seq1, seq2) if a != b) + abs(len(seq1) - len(seq2))
Run Code Online (Sandbox Code Playgroud)
编写利用True存在1和False存在的另一种奇怪方式0是:
sum(a != b for a, b in zip(seq1, seq2))+ abs(len(seq1) - len(seq2))
Run Code Online (Sandbox Code Playgroud)
zip是一个内置的python,允许您一次迭代两个序列.它也将以最短的序列终止,观察:
>>> seq1 = 'hi'
>>> seq2 = 'world'
>>> for a, b in zip(seq1, seq2):
... print('a =', a, '| b =', b)
...
a = h | b = w
a = i | b = o
Run Code Online (Sandbox Code Playgroud)
这将评估类似于sum([1, 1, 1])每个1表示两个序列之间的差异的情况.该if a != b滤波器引起发电机只产生一个值时a和b不同.