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
相关产品推荐
相关产品推荐

