如何判断Python列表中两个指定元素是否为位置最邻近元素
可行实现方案
可以实现,核心判断逻辑很简单:列表里两个不同元素的最小位置间隔为1(也就是索引相邻、中间没有其他元素),只要遍历列表检查有没有相邻元素对正好和传入的目标变量顺序一致,就能确认这对是所有匹配项里位置最邻近的,直接返回True即可。
实现代码
def is_closest_pair(arr, target_pair): first, second = target_pair # 遍历所有相邻元素位 for idx in range(len(arr) - 1): if arr[idx] == first and arr[idx + 1] == second: return True return False # 测试样例,先修正原数组最后一个元素多余的"]"笔误 array = ['3', 'pnwites', 'it', 'we', 'sy', 'nwjccoor,', '_', 'invoice', '°—', 'page:', '1', 'of', '1', 'nucor', 'steel', 'tuscaloosa,', 'inc.', 'please', 'make', 'checks', 'payable', 'and', 'mail', 'to:', 'invoice', 'date:', '12/29/2021', 'seenivoee'] variable = ['invoice', 'date:'] print(is_closest_pair(array, variable))
运行上述代码会直接输出True,符合预期。
样例匹配说明
给出的列表里invoice一共出现了两次:
- 第一次在索引7位,后面紧邻的元素是
°—,和date:的位置隔了16个元素,距离很远; - 第二次在索引23位,后面紧邻的索引24位正好是
date:,二者间隔为1,是所有invoice和date:组合里距离最近的匹配对,因此判定成立。
如果需要兼容两个词顺序颠倒的场景,只要把判断条件补充为
(arr[idx] == first and arr[idx + 1] == second) or (arr[idx] == second and arr[idx + 1] == first)即可。如果业务允许两个词中间夹1-2个OCR识别出来的无意义噪声符号,可以把单步遍历改成滑动窗口检查,调整允许的间隔阈值就行。
内容的提问来源于stack exchange,提问作者Manu Raj
相关产品推荐
相关产品推荐

