Python:如何从小到大查找索引范围?缩进数组分组索引需求
解决缩进数组的分组问题
哦对了,看你描述的“遇到下一个更大数值时停止”和实际期望的分组似乎有点出入——你给出的示例中第一组结束于缩进3,下一个缩进是1(更小),第二组结束于缩进2,下一个是1(更小)。所以我推测你实际需要的是当遇到比当前分组的最大缩进值更小的数值时结束当前分组,下面是基于这个逻辑的具体实现方案:
核心逻辑步骤
- 先把缩进数组的字符串值转为整数,方便数值比较
- 初始化当前分组的起始索引和分组内的最大缩进值
- 遍历缩进数组,从第二个元素开始判断:
- 如果当前缩进值小于当前分组的最大缩进值,说明当前分组结束,记录索引范围并开启新分组
- 否则,更新当前分组的最大缩进值为当前值和原最大值中的较大者
- 遍历结束后,别忘了添加最后一个未记录的分组
Python代码示例
# 你的原始数组 rows = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] indents = ['1', '2', '3', '1', '2', '2', '2', '2', '1', '2'] # 转换缩进值为整数,便于比较 int_indents = [int(x) for x in indents] # 存储分组的索引范围(起始索引,结束索引) group_indices = [] if not int_indents: print("数组为空,无法分组") else: start_idx = 0 current_max_indent = int_indents[start_idx] for i in range(1, len(int_indents)): current_val = int_indents[i] if current_val < current_max_indent: # 结束当前分组,记录索引范围 group_indices.append((start_idx, i-1)) # 开启新分组 start_idx = i current_max_indent = current_val else: # 更新当前分组的最大缩进值 if current_val > current_max_indent: current_max_indent = current_val # 添加最后一个分组 group_indices.append((start_idx, len(int_indents)-1)) # 输出分组结果 print("分组索引范围及对应值:") for start, end in group_indices: print(f"索引范围:{start} ~ {end}") print(f"行数组对应值:{rows[start:end+1]}") print(f"缩进数组对应值:{indents[start:end+1]}") print("---")
代码输出结果
分组索引范围及对应值: 索引范围:0 ~ 2 行数组对应值:['1', '2', '3'] 缩进数组对应值:['1', '2', '3'] --- 索引范围:3 ~ 7 行数组对应值:['4', '5', '6', '7', '8'] 缩进数组对应值:['1', '2', '2', '2', '2'] --- 索引范围:8 ~ 9 行数组对应值:['9', '10'] 缩进数组对应值:['1', '2'] ---
额外说明
如果你确实是需要“遇到下一个更大数值时停止”的逻辑,只需要把判断条件改成current_val > current_max_indent即可,但这样得到的分组会和你给出的示例不符,可以根据实际需求调整。
内容的提问来源于stack exchange,提问作者Christian B
相关产品推荐
相关产品推荐

