如何仅合并相邻列表中同描述的区间值?
解决方案
首先需要完成两个核心步骤:
- 对每口井内部的相邻同描述区间进行合并
- 按区间的位置(每口井的第n个区间)分组,若同一位置的所有区间描述相同则合并输出一行,否则每个区间单独输出一行
修改后的完整代码
wells = [ [ [0, 4, 'earth'], [4, 8, 'suglinok'], [8, 20, 'gravel'], ], [ [0, 4, 'earth'], [4, 8, 'suglinok'], [8, 20, 'sand'], ], [ [0, 4, 'earth'], [4, 16, 'suglinok'], [16, 24, 'gravel'], ] ] # 合并单口井内相邻的同描述区间 def merge_adjacent_in_well(well): if not well: return [] merged = [] curr_start, curr_end, curr_desc = well[0] for start, end, desc in well[1:]: if desc == curr_desc: # 相邻同描述,更新结束深度 curr_end = end else: merged.append([curr_start, curr_end, curr_desc]) curr_start, curr_end, curr_desc = start, end, desc merged.append([curr_start, curr_end, curr_desc]) return merged # 处理所有井 processed_wells = [merge_adjacent_in_well(well) for well in wells] # 按区间位置分组输出 max_interval_count = max(len(well) for well in processed_wells) for pos in range(max_interval_count): # 收集所有井当前位置的区间和描述 group_intervals = [] group_descs = [] for well in processed_wells: if pos < len(well): start, end, desc = well[pos] group_intervals.append([start, end]) group_descs.append(desc) # 判断当前位置的所有区间描述是否一致 all_same_desc = all(d == group_descs[0] for d in group_descs) if all_same_desc: # 描述一致,所有区间输出一行 print(' '.join(str(interval) for interval in group_intervals)) else: # 描述不一致,每个区间单独输出一行 for interval in group_intervals: print(str(interval))
代码说明
合并单口井内部区间:
- 遍历单口井的区间,维护当前合并的区间起始、结束深度和描述
- 若下一个区间描述与当前一致,则更新结束深度;否则将当前合并好的区间存入结果,切换到新的区间
按位置分组输出:
- 先确定所有井中最多的区间数量,遍历每个位置
- 收集所有井在该位置的区间和对应的描述
- 若该位置所有区间的描述相同,就把这些区间打印在同一行;否则每个区间单独打印一行
输出结果
[0, 4] [0, 4] [0, 4] [4, 8] [4, 8] [4, 16] [8, 20] [8, 20] [16, 24]
内容的提问来源于stack exchange,提问作者Tommy Vercetti
相关产品推荐
相关产品推荐

