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

如何判断索引在元组列表中的所属分段并返回其序号

解决思路与实现代码

要返回索引所在的分段序号(从1开始计数),核心是遍历分段列表时同时跟踪每个分段的位置,而不是只判断是否存在符合条件的区间。这里给你两种实用的实现方式:

方式一:直观的循环遍历(易读性高)

用enumerate函数遍历列表,同时指定start=1让序号从1开始,这样直接就能得到分段的编号。找到匹配的区间后立即返回序号,没找到则返回None方便后续处理:

seg = [(874, 893), (964, 985), (1012, 1031)]
target_index = 876

def get_segment_number(segments, target):
    # enumerate的start=1参数让序号从1开始计数
    for seg_num, (start, end) in enumerate(segments, start=1):
        if start <= target <= end:
            return seg_num
    # 索引不在任何区间时返回None
    return None

result = get_segment_number(seg, target_index)
if result:
    print(f"index inside segment {result}")  # 输出:index inside segment 1
else:
    print("index not in any segment")

方式二:简洁的生成器+next函数(代码更紧凑)

如果喜欢更简洁的写法,可以用生成器表达式配合next函数,一行获取结果,同时指定默认值处理无匹配的情况:

seg = [(874, 893), (964, 985), (1012, 1031)]
target_index = 1015

# 从生成器中取第一个符合条件的分段序号,无匹配则返回None
segment_num = next(
    (num for num, (s, e) in enumerate(seg, 1) if s <= target_index <= e),
    None
)

if segment_num:
    print(f"index inside segment {segment_num}")  # 输出:index inside segment 3
else:
    print("index not in any segment")

补充说明

  • 两种方式都处理了边界值:比如索引等于区间的起始或结束值(如874、893),<=会正确判定为在区间内。
  • 原来的代码只是生成了一个非空列表来判断存在性,但没有跟踪分段位置,而enumerate正好解决了这个问题——它能同时拿到元素的位置和值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:21:36