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

Python中如何查找列表指定值及其前后相邻元素 支持连续特殊值场景

实现方案

逻辑思路

  • 遍历目标列表,识别连续特殊值序列的起止边界
  • 每个特殊序列自动附带前一个相邻的非特殊元素、所有连续特殊元素、后一个相邻的非特殊元素
  • 兼容边界场景:特殊序列在列表开头则无前邻元素,在列表末尾则无后邻元素

代码实现(Python)

def find_special_blocks(input_list, special_val="special"):
    result = {}
    list_len = len(input_list)
    current_idx = 0
    block_count = 1
    while current_idx < list_len:
        # 定位连续特殊值的起始位置
        if input_list[current_idx] == special_val:
            start_idx = current_idx
            # 定位连续特殊值的结束位置
            while current_idx < list_len and input_list[current_idx] == special_val:
                current_idx += 1
            end_idx = current_idx - 1
            # 组装结果块
            block_content = []
            # 添加前邻非特殊元素(如果存在)
            if start_idx > 0:
                block_content.append(input_list[start_idx - 1])
            # 添加所有连续特殊元素
            block_content.extend([special_val] * (end_idx - start_idx + 1))
            # 添加后邻非特殊元素(如果存在)
            if end_idx < list_len - 1:
                block_content.append(input_list[end_idx + 1])
            result[f"out{block_count}"] = block_content
            block_count += 1
        else:
            current_idx += 1
    return result

测试验证

示例1测试

输入:

list1 = ["text", "text2", "text3", "special", "text4", "text5"]
print(find_special_blocks(list1))

输出:
{'out1': ['text3', 'special', 'text4']}
如果需要得到示例中的逗号分隔字符串格式,执行", ".join(find_special_blocks(list1)['out1'])即可得到text3, special, text4。

示例2测试

输入:

list2 = ["text", "text2", "text3", "special", "special", "special", "special", "text4", "text5"]
print(find_special_blocks(list2))

输出:
{'out1': ['text3', 'special', 'special', 'special', 'special', 'text4']}

输出说明

返回结果为字典格式,key按特殊序列出现顺序命名为out1、out2...,value为对应特殊序列附带前后邻元素的列表,可直接读取后续使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:06:04