比较两个整数的相似性

-2 投票
2 回答
2399 浏览
提问于 2025-04-17 05:32

示例:

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

我想比较这两个数字,当这两个数字之间出现某种相似性时,程序能提醒我。

我希望这个解决方案能有一些灵活性,比如只要第一个数字不同也可以算相似。

顺便说一下,我使用的是Python 3.X。

2 个回答

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

这个方法会返回所有位置差值的总和。

4

你可以使用 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

撰写回答