计算两个字符串之间的差异

时间:2015-02-10 03:13:21

标签: python

我正在尝试计算两个导入字符串(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")

5 个答案:

答案 0 :(得分:10)

使用生成器表达式

可以非常平坦地执行此操作
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))

撰写利用True 1False0的另一种奇怪方式是:

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代表两个序列之间的差异。 if a != b过滤器会导致生成器仅在ab不同时生成值。

答案 1 :(得分:1)

当你说for i in seq1时,你正在迭代字符,而不是索引。您可以改为使用enumerate来代替for i, ch in enumerate(seq1)

甚至更好,使用标准函数zip一次完成两个序列。

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

答案 2 :(得分: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循环不正确,因为你并没有真正告诉for循环给一个整数,因此正确的代码是给它一个seq1长度的范围,所以:

for i in range(len(seq1)):

希望它有所帮助! :)

答案 3 :(得分:0)

所以我不得不按照您的要求去做,我想出了一个非常简单的解决方案。我的有点不同,因为我检查了字符串以查看哪个更大,然后将它们放在正确的变量中以便以后进行比较。用香草python完成所有操作:

#Declare Variables
a='Here is my first string'
b='Here is my second string'
notTheSame=0
count=0

#Check which string is bigger and put the bigger string in C and smaller string in D
if len(a) >= len(b):
    c=a
    d=b
if len(b) > len(a):
    d=a
    c=b

#While the counter is less than the length of the longest string, compare each letter.
while count < len(c):
    if count == len(d):
        break
    if c[count] != d[count]:
        print(c[count] + " not equal to " + d[count])
        notTheSame = notTheSame + 1
    else:
        print(c[count] + " is equal to " + d[count])
    count=count+1

#the below output is a count of all the differences + the difference between the 2 strings
print("Number of Differences: " + str(len(c)-len(d)+notTheSame))

答案 4 :(得分:0)

在你的脚本中有错误

  1. "i" 应该是整数,而不是字符
  2. "return" 应该在与 print 相同级别的函数中,而不是在循环 "for" 中
  3. 尽量不要在函数中以这种方式使用“打印”

这是工作版本:

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