例子:比較兩個整數的相似
number1 = 54378
number2 = 54379
if number1 (is similar to) number2:
print (number1 + " " + number2)
input("what to do")
我想這兩個數字之間的比較,並讓當這種(數字1和數字2之間)發生了相似的計劃通知我。
我想解決方案是靈活的,有更多的相似空間(因爲第一個數字是不同的)。
順便說一句,我使用Python 3.X
例子:比較兩個整數的相似
number1 = 54378
number2 = 54379
if number1 (is similar to) number2:
print (number1 + " " + number2)
input("what to do")
我想這兩個數字之間的比較,並讓當這種(數字1和數字2之間)發生了相似的計劃通知我。
我想解決方案是靈活的,有更多的相似空間(因爲第一個數字是不同的)。
順便說一句,我使用Python 3.X
您可以使用difflib
此:
>>> from difflib import SequenceMatcher
>>> number1 = 54378
>>> number2 = 54379
>>> SequenceMatcher(None, str(number1), str(number2)).ratio()
0.80000000000000004
創建與他們的數字的字符串表示一個SequenceMatcher
對象後,使用ratio()
(或quick_ratio()
或real_quick_ratio()
如果速度是一個問題),以獲得在0一相似性評級和1
玩弄了一點後,你可以想出一個好的衡量標準是什麼,他們應該如何類似的是,用這樣的:
metric = 0.6 # just an example value
if SequenceMatcher(None, str(a), str(b)).ratio() > metric:
# a and b are similar
這看起來像比較兩個數字的base10表示,而不是數字本身... – yosukesabai
,你可以做以下之一:
雙方將在不平的數字,如(100, 10)
(200, 12)
from itertools import izip_longest
def findSim(a, b):
aS = str(a)
bS = str(b)
return [abs(int(x)-int(y)) if y != None else int(x) for x,y in izip_longest(aS,bS)]
返回與所有列表位置差異,
from itertools import izip_longest
def findSim(a, b):
aS = str(a)
bS = str(b)
return sum(abs(int(x)-int(y)) if y != None else int(x) for x,y in izip_longest(aS,bS))
返回所有位置的總和差。
您尚未定義相似性。 – Anonymous
定義類似於。有範圍嗎? – Serdalis
彼此相似,不是100%相似,但有些相似。我增加了更多的補充。 –