我正在尝试计算两个导入字符串(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 :(得分: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
1
和False
为0
的另一种奇怪方式是:
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
过滤器会导致生成器仅在a
和b
不同时生成值。
答案 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)
在你的脚本中有错误
这是工作版本:
def difference (seq1, seq2):
count = 0
for i in range(len(seq1)):
if seq1[i] != seq2[i]:
count += 1
return (count)