Python编程求助:查找字母列表最长连续重复序列
解决最长连续重复字符序列问题
这里提供两种实用的实现方案,你可以根据需求选择:
基础遍历实现
逻辑直观,适合理解核心思路:
def find_longest_consecutive(chars): if not chars: return 0, "" # 处理空列表的边界情况 max_length = 1 current_length = 1 max_char = chars[0] current_char = chars[0] for char in chars[1:]: if char == current_char: current_length += 1 # 更新最长记录 if current_length > max_length: max_length = current_length max_char = current_char else: current_char = char current_length = 1 return max_length, max_char # 测试示例 test_list = ["C", "A", "G", "G", "G", "T", "A", "C", "A", "A"] length, char = find_longest_consecutive(test_list) print(f"最长连续重复长度:{length},对应字符:{char}")
代码说明
- 先处理空列表的特殊情况,返回长度0和空字符串
- 初始化四个变量,分别跟踪最长长度、当前连续长度、最长字符、当前跟踪字符
- 从第二个元素开始遍历:
- 若当前字符和跟踪字符一致,增加当前连续长度,同时检查是否超过最长记录,超过则更新
- 若不一致,重置当前跟踪字符和长度
- 最后返回最长长度和对应字符
使用itertools.groupby简化实现
借助Python标准库让代码更简洁:
from itertools import groupby def find_longest_consecutive(chars): if not chars: return 0, "" # 用groupby把连续相同字符分组,生成(字符,组长度)的元组列表 groups = [(char, len(list(group))) for char, group in groupby(chars)] # 按组长度排序,取最大的那一组 max_group = max(groups, key=lambda x: x[1]) return max_group[1], max_group[0] # 测试示例 test_list = ["C", "A", "G", "G", "G", "T", "A", "C", "A", "A"] length, char = find_longest_consecutive(test_list) print(f"最长连续重复长度:{length},对应字符:{char}")
代码说明
groupby会自动把连续相同的字符归为一组,返回字符和对应的迭代器- 将每个分组转换为(字符,组长度)的元组,再通过
max函数按长度筛选出最长的分组 - 最终返回该分组的长度和字符
两种方案运行你的测试示例,都会得到结果:3 和 "G"。
内容的提问来源于stack exchange,提问作者Valeria Gini
相关产品推荐
相关产品推荐

