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

Python如何检查列表元素是否始终符合2-1-2序列模式

Python校验列表是否符合2-1-2交替规律的实现方法

你需要校验的2-1-2序列规律,本质是索引从0开始计数时,偶数位固定为2、奇数位固定为1的交替规则,有几种非常简单的实现方式,按需选用即可:


方法1:可定位所有异常位置的遍历校验(排查问题首选)

这个方法会把所有不符合规则的位置、实际值、预期值都列出来,排查异常的时候最实用:

L = [2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1]

def check_seq(lst):
    error_list = []
    for index, value in enumerate(lst):
        expected_val = 2 if index % 2 == 0 else 1
        if value != expected_val:
            error_list.append( (index, value, expected_val) )
    return error_list

errors = check_seq(L)
if not errors:
    print("列表完全符合规则,无异常值")
else:
    print(f"共检测到{len(errors)}个异常:")
    for pos, actual, expect in errors:
        print(f"索引{pos}处值为{actual},不符合预期值{expect}")

你提供的样例列表运行上述代码,会返回无异常的结果。


方法2:一行代码快速判断合规性

如果不需要定位具体异常位置,只想快速知道列表是否符合规则,用all()生成器表达式即可,写法极简、运行效率也高:

is_legal = all( (2 if i%2 == 0 else 1) == val for i, val in enumerate(L) )

返回True代表完全合规,返回False代表存在异常值。


拓展:适配任意重复序列的通用写法

如果后续你需要校验其他长度的重复规律(比如长度为3的2-1-3循环),可以用基准序列切片匹配的写法,不需要修改核心逻辑:

# 把基准重复序列写在这里即可,比如2-1循环就写[2,1],2-1-2循环就写[2,1,2]
base = [2, 1]
step = len(base)
is_legal = all(L[i:i+step] == base for i in range(0, len(L), step))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 21:03:40