2015-02-10 112 views
3

我想计算两个导入的字符串(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") 
+0

缩进是非常重要的。(在拉链1的a,b(SEQ1,SEQ2)如果!= B) – 2015-02-10 03:16:38

+0

数= SUM 打印(计数) 工作太棒了! – 2015-02-10 03:23:47

回答

7

你可以用生成器表达式

count = sum(1 for a, b in zip(seq1, seq2) if a != b) 

如果序列是不同长度的做到这一点相当平平,那么你可以考虑在长度上的差异是在内容的差异(我会)。在这种情况下,一个额外的一块标签占它

count = sum(1 for a, b in zip(seq1, seq2) if a != b) + abs(len(seq1) - len(seq2)) 

编写另一个weirdish方式这需要True1False0的优点是:

sum(a != b for a, b in zip(seq1, seq2))+ abs(len(seq1) - len(seq2)) 

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 

这将评估类似sum([1, 1, 1])每个1表示两个序列之间的差异。当ab不同时,if a != b过滤器会使发生器仅产生一个值。

+0

它返回'1'在'hey'和'hello'上测试。 – GLHF 2015-02-10 03:24:12

+0

@howaboutNO hm,从OP看起来序列长度相同,但好点,我会调整 – 2015-02-10 03:25:31

+0

使用itertools.izip_longest :) – Hackaholic 2015-02-10 03:26:00

1

当你说for i in seq1你迭代的人物,而不是指标。您可以使用enumerate来代替for i, ch in enumerate(seq1)

或者甚至更好,使用标准功能zip一次通过两个序列。

你也有问题,因为你return之前你print。可能您的return需要向下移动并缩进。

0

正确的代码是:

def difference(seq1, seq2): 
    count = 0 
    for i in range(len(seq1)): 
     if seq1[i] != seq2[i]: 
      count += 1 
    return count 

首先return语句在函数结束时进行,因此它不应该是循环或for循环将只运行一次的一部分。 其次for循环是不正确的,因为你没有真正告诉给for循环的整数,因此正确的代码是给它一个范围SEQ1的长度,所以:

for i in range(len(seq1)): 

希望它帮助! :)

相关问题