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

Python列表子列表升序校验:修复索引越界问题

解决列表子列表升序检查的索引越界与逻辑问题

你要检查列表a=[[1,2],[3,4],[5,6]]里所有子列表是否按升序排列(每个子列表的对应元素都小于下一个子列表的对应元素),但原函数不仅出现了索引越界,还存在逻辑上的疏漏,我来一步步帮你修正。

原代码的问题分析

  • 索引越界错误:外层循环range(0, len(L))会让i遍历到len(L)-1,此时L[i+1]会访问超出列表范围的索引(列表最后一个元素的索引是len(L)-1,i+1等于len(L),这是不存在的位置)。
  • 逻辑提前返回:原代码只要第一次进入循环就直接return True或False,根本没检查完所有相邻的子列表对。比如第一个子列表满足条件,但第二个不满足时,函数会错误地返回True。
  • 多余的内层循环:内层循环j完全没起到作用,因为题目里每个子列表都是固定的两个元素,直接比较这两个元素即可,不需要遍历子列表的元素。

修改后的代码

def FirstRuleLink(L):
    # 遍历每一对相邻的子列表,循环到len(L)-1就停止,避免i+1越界
    for i in range(len(L)-1):
        # 检查当前子列表的两个元素是否都小于下一个子列表的对应元素
        if not (L[i][0] < L[i+1][0] and L[i][1] < L[i+1][1]):
            # 只要有一对不满足条件,直接返回False
            return False
    # 所有相邻子列表对都满足要求,返回True
    return True

代码解释

  1. 循环范围修正:range(len(L)-1)确保i的取值是0到len(L)-2,这样i+1最大是len(L)-1,刚好是列表最后一个元素的索引,彻底避免了索引越界。
  2. 逻辑调整:改为只要有一对相邻子列表不满足条件就返回False,只有当所有相邻对都通过检查后,才返回True,完全符合你“所有子列表按升序排列”的要求。
  3. 简化代码结构:移除了没用的内层j循环,直接比较子列表的两个元素,代码更简洁高效。

测试验证

用你的示例列表测试:

a = [[1,2],[3,4],[5,6]]
print(FirstRuleLink(a))  # 输出True

再测试一个不满足的情况:

b = [[1,3],[2,4],[5,6]]
print(FirstRuleLink(b))  # 输出False,因为第一个子列表的第二个元素3不小于下一个子列表的4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:12:36