2つの文字列またはリストを比較するには、レーベンシュタイン距離を使用できます(ここからの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
:コメントに説明を追加すると、リストの代わりにsを使用できます。セットのすべての要素は一意であるため、既存の要素を再度追加することはできません。また、セットのisdisjoint
メソッドを使用して、2つのセットに同じ要素が含まれていないことを確認したり、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])
注意:セットを作成するこの構文には、少なくともPython2.7が必要です。