比較兩個字符串或列表,你可以使用Levenshtein distance(從here Python實現):
def levenshtein(s1, s2):
l1 = len(s1)
l2 = len(s2)
matrix = [range(l1 + 1)] * (l2 + 1)
for zz in range(l2 + 1):
matrix[zz] = range(zz,zz + l1 + 1)
for zz in range(0,l2):
for sz in range(0,l1):
if s1[sz] == s2[zz]:
matrix[zz+1][sz+1] = min(matrix[zz+1][sz] + 1,
matrix[zz][sz+1] + 1,
matrix[zz][sz])
else:
matrix[zz+1][sz+1] = min(matrix[zz+1][sz] + 1,
matrix[zz][sz+1] + 1,
matrix[zz][sz] + 1)
return matrix[l2][l1]
使用您的列表:
>>> a = [4, 7, 9]
>>> b = [5, 8, 10]
>>> c = [2, 3]
>>> levenshtein(a,b)
3
>>> levenshtein(b,c)
3
>>> levenshtein(a,c)
3
編輯:與添加的解釋在評論中,您可以使用set
而不是列表。由於集合中的每個元素都是唯一的,因此再次添加現有元素是無操作的。你可以使用這個集合的isdisjoint
方法檢查兩個集不包含相同的元素,或intersection
方法,看看他們有哪些元素是共同的:
In [1]: a = {1,3,5}
In [2]: a.add(3)
In [3]: a
Out[3]: set([1, 3, 5])
In [4]: a.add(4)
In [5]: a
Out[5]: set([1, 3, 4, 5])
In [6]: b = {2,3,7}
In [7]: a.isdisjoint(b)
Out[7]: False
In [8]: a.intersection(b)
Out[8]: set([3])
注:此語法創建組至少需要Python 2.7。
謝謝羅蘭!雖然代碼可能沒有直接用處,但是感謝大家向我介紹Levenshtein距離的想法。 – RLOA 2012-08-15 11:15:59