如何统计列表中最长的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
相关产品推荐
相关产品推荐

