You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现带间隙范围限制的find_gappy子列表查找函数?

嘿,我来帮你搞定这个需求!咱们一步步实现符合要求的find_gappy函数。

实现思路

要解决这个问题,核心要做两件事:

  • 确保matches里的元素按顺序出现在目标子列表中
  • 检查每一对相邻匹配元素之间的间隙(也就是中间隔的非匹配元素数量),不能超过指定的范围
完整代码实现
def find_gappy(target_list, matches, range_limit):
    match_count = len(matches)
    if match_count == 0:
        return True  # 空匹配的情况可根据实际需求调整
    
    current_match = 0
    last_match_pos = -1

    for idx, item in enumerate(target_list):
        if item == matches[current_match]:
            # 不是第一个匹配项时,检查间隙
            if last_match_pos != -1:
                # 计算两个匹配项之间的间隙:当前位置 - 上一个匹配位置 - 1
                gap_size = idx - last_match_pos - 1
                if gap_size > range_limit:
                    return False
            # 更新匹配进度和上一个匹配位置
            last_match_pos = idx
            current_match += 1
            # 所有匹配项都找到,直接返回符合条件
            if current_match == match_count:
                return True
    
    # 遍历完都没找全所有匹配项,不符合要求
    return False
代码说明
  • 边界处理:如果传入的matches是空列表,默认返回True,你可以根据实际需求改成False
  • 匹配遍历:逐个扫描目标子列表的元素,按顺序寻找matches里的每一项
  • 间隙检查:每找到一个匹配项,就计算它和上一个匹配项的间隙大小,一旦发现间隙超过range_limit,直接返回False
  • 提前终止:当所有匹配项都按顺序找到且间隙符合要求时,直接返回True,不用继续遍历
测试示例

用你给出的测试数据验证一下:

# 给定的输入列表
input_data = [
    ['she', 'is', 'a', 'student'],
    ['she', 'is', 'a', 'lawer'],
    ['she', 'is', 'a', 'great', 'student'],
    ['i', 'am', 'a', 'teacher'],
    ['she', 'is', 'a', 'very', 'very', 'exceptionally', 'good', 'student']
]
matches = ['she', 'is', 'student']

# 筛选符合条件的子列表
filtered_result = [sub_list for sub_list in input_data if find_gappy(sub_list, matches, range_limit=2)]
print(filtered_result)

运行后会得到预期结果:

[['she', 'is', 'a', 'student'], ['she', 'is', 'a', 'great', 'student']]

为什么最后一个子列表被排除?因为它里面a(位置2)和student(位置7)之间的间隙是7-2-1=4,超过了指定的range_limit=2,所以不符合要求。

内容的提问来源于stack exchange,提问作者Clement Attlee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:22:01