我想比较3或4位整数的字符串表示。我想将它们分组成“接近度”对。也就是说,pc_dud [3]
应该与dud [0]
配对。
dud = ['3433', '3467', '3551', '345', '345', '3613']
pc_dud = ['3401', '3402', '3430', '0342', '3584']
有没有好的工具可以用来完成这个任务呢(我在想也许是jellyfish之类的东西)?当然,另一种解决方法是将算术差作为“接近度”的指标。大家有什么想法吗?
我想比较3或4位整数的字符串表示。我想将它们分组成“接近度”对。也就是说,pc_dud [3]
应该与dud [0]
配对。
dud = ['3433', '3467', '3551', '345', '345', '3613']
pc_dud = ['3401', '3402', '3430', '0342', '3584']
有没有好的工具可以用来完成这个任务呢(我在想也许是jellyfish之类的东西)?当然,另一种解决方法是将算术差作为“接近度”的指标。大家有什么想法吗?
>>> import difflib
>>> dud = ['3433', '3467', '3551', '345', '345', '3613']
>>> pc_dud = ['3401', '3402', '3430', '0342', '3584']
>>> difflib.get_close_matches(dud[0], pc_dud)
['3430']
如果您想要算术接近度,那么pc_dud[3]将无法与dud[0]匹配。
如果您只想保留唯一的配对,请使用此代码:
dud_ = dud[:]
pc_dud_ = pc_dud[:]
while dud_:
d1, d2 = min(itertools.product(dud, pc_dud), key=lambda d1,d2: abs(int(d1) - int(d2)))
dud_.remove(d1)
pc_dud_.remove(d2)
print d1, d2
你可以采用一种方法,计算dud中每个整数字符串与pc_dud中每个整数字符串之间的Levenshtein Distance。这个算法将为您提供每个数字序列之间的编辑距离。编辑距离数字表示将给定序列转换为另一个序列所需的最小步骤数。它考虑插入、删除和替换。
您需要一个数据结构来存储相对于比较序列的编辑距离结果。然后,您可以调查哪个编辑距离最小,然后将它们分组成一对。
以下是两个数组中的两个数字序列在使用levenshtein进行比较时的可视化示例。我使用了这个工具来生成截图。http://www.let.rug.nl/kleiweg/lev/
右下角的数字是最小编辑距离。