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

如何统计列表中最长的01交替序列长度?

统计最长01交替子序列

问题说明

需要统计列表中最长的01交替序列,序列既可以以0,1开头,也可以以1,0开头。比如示例列表:

sample_list = [1,1,1,0,0,1,1,1,0,1,0,1,0,1,0]

预期输出为4,对应子序列如1,0,1,0(长度为4)。

原代码存在的问题

你提供的代码有以下几个问题:

  • 滥用全局变量key,代码可读性和维护性差
  • 逻辑错误:itertools.groupby使用方式不正确,A[c+1]会触发索引越界异常
  • 仅考虑了以0,1开头的交替情况,完全忽略1,0开头的场景
  • 硬编码测试列表A,未实际使用读取的文件内容key2

正确实现方案

通过遍历列表跟踪当前交替序列长度,同时记录最大值的方式实现,逻辑简单高效:

def longest_alternating_sequence(nums):
    if not nums:
        return 0
    max_len = 1
    current_len = 1
    for i in range(1, len(nums)):
        # 当前元素与前一个不同,交替序列延续
        if nums[i] != nums[i-1]:
            current_len += 1
            max_len = max(max_len, current_len)
        else:
            # 元素相同,重置当前序列长度
            current_len = 1
    return max_len

# 示例测试
sample_list = [1,1,1,0,0,1,1,1,0,1,0,1,0,1,0]
print(longest_alternating_sequence(sample_list))  # 输出:4

# 读取文件内容并处理的版本
with open("file.txt", 'r+') as file:
    file_context = file.read().strip()
    # 假设文件内容为逗号分隔的数字,如"1,1,1,0,0..."
    nums = [int(x) for x in file_context.split(',')]
    print(longest_alternating_sequence(nums))

代码说明

  • 遍历列表时,对比当前元素与前一个元素:若不同则延长当前序列长度并更新最大值;若相同则重置当前序列长度
  • 处理了空列表的边界情况
  • 同时提供示例测试和文件读取处理版本,适配你的文件读取需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:10:36