簡體   English   中英

計算兩個字符串之間的差異

[英]Counting differences between two strings

我正在嘗試計算兩個導入字符串(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")

你可以用一個生成器表達式非常簡單地做到這一點

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))

另一種利用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代表兩個序列之間的差異。 if a != b過濾器使生成器僅在ab不同時生成一個值。

當您for i in seq1您是在迭代字符,而不是索引。 您可以通過for i, ch in enumerate(seq1)for i, ch in enumerate(seq1)來使用enumerate

或者更好的是,使用標准函數zip一次遍歷兩個序列。

您也有問題,因為您在print之前return 可能您的return需要向下移動且無縮進。

正確的代碼是:

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)):

所以我必須按照你的要求去做,我想出了一個非常簡單的解決方案。 我的有點不同,因為我檢查字符串以查看哪個更大並將它們放入正確的變量中以便稍后進行比較。 全部使用 Vanilla 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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM