2011-11-02 131 views
-3

例子:比較兩個整數的相似

number1 = 54378 
number2 = 54379 
if number1 (is similar to) number2: 
    print (number1 + " " + number2) 
    input("what to do") 

我想這兩個數字之間的比較,並讓當這種(數字1和數字2之間)發生了相似的計劃通知我。

我想解決方案是靈活的,有更多的相似空間(因爲第一個數字是不同的)。

順便說一句,我使用Python 3.X

+0

您尚未定義相似性。 – Anonymous

+0

定義類似於。有範圍嗎? – Serdalis

+0

彼此相似,不是100%相似,但有些相似。我增加了更多的補充。 –

回答

3

您可以使用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 
+0

這看起來像比較兩個數字的base10表示,而不是數字本身... – yosukesabai

0

,你可以做以下之一:
雙方將在不平的數字,如(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)) 

返回所有位置的總和差。