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

如何用Python识别数组中不符合指定序列的异常元素索引?

问题需求

给定重复序列 sequence = [1, 1, 0],正常数组会全程重复该序列(例如 [1, 1, 0, 1, 1, 0, 1, 1, 0])。但部分数组中混入了个别异常元素(仅0或1),移除这些异常元素后数组会完全符合序列重复规律。需要编写Python代码找出所有异常元素的索引。

示例:
异常数组 [1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0] 中,索引6和16的元素是异常值,移除后数组符合序列重复规则。

此前尝试的方案存在缺陷:

  • 将数组拆分为3元素块递归检查,效率极低
  • 通过索引和已识别异常数计算预期值,但逐元素对比导致逻辑重叠,易出错

解决方案

思路

采用线性遍历的方式,维护一个指针跟踪当前需要匹配的序列位置:

  • 遍历数组时,若当前元素与序列指针指向的元素匹配,则将指针后移(循环回到序列开头)
  • 若不匹配,则记录当前索引为异常,不移动序列指针

该方法时间复杂度为O(n)(n为数组长度),效率高且逻辑清晰,不会出现重叠问题。

代码实现

def find_anomalous_indices(arr, sequence):
    seq_len = len(sequence)
    if seq_len == 0:
        return []
    seq_ptr = 0
    anomalies = []
    for idx, num in enumerate(arr):
        if num == sequence[seq_ptr]:
            seq_ptr = (seq_ptr + 1) % seq_len
        else:
            anomalies.append(idx)
    return anomalies

# 测试示例
test_array = [1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0]
target_sequence = [1, 1, 0]
print(find_anomalous_indices(test_array, target_sequence))  # 输出: [6, 16]

代码说明

  • seq_ptr:始终指向当前应该匹配的序列元素位置,匹配成功后循环推进
  • 遍历过程中,仅在元素匹配时推进序列指针,不匹配则直接标记当前索引为异常
  • 空序列做特殊处理,直接返回空列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:20:22