Python如何获取列表最长连续'Eagle'序列的首尾索引
实现修改方案
你只需要在原有计数逻辑基础上新增3个索引记录变量,在每次刷新最长连续长度时同步更新首尾索引即可,不需要改动原有核心遍历逻辑,还能兼容列表末尾为'Eagle'的边界场景。
核心调整点
- 新增
current_start变量:记录当前正在统计的连续'Eagle'片段的起始索引 - 新增
max_start、max_end变量:记录已找到的最长连续'Eagle'片段的首尾索引 - 每次遇到连续段中断(元素变为'Tails')、或者遍历到列表末尾触发最长长度更新时,同步把当前连续段的首尾索引赋值给
max_start和max_end - 注意元素为'Tails'触发更新时,当前连续段的最后一个'Eagle'索引是
i-1,不是当前位置i
修改后可直接运行的代码
import random monets = [] for i in range(20): choices = ['Tails', 'Eagle'] monets.append(random.choice(choices)) cnt = 0 prev = 0 # 新增索引记录变量 max_start = 0 max_end = 0 current_start = 0 for i, e in enumerate(monets): if e == 'Eagle': # 记录当前连续Eagle段的起始位置 if cnt == 0: current_start = i cnt += 1 # 处理列表末尾是Eagle的边界场景 if i == len(monets) - 1 and cnt > prev: prev = cnt max_start = current_start max_end = i else: if prev < cnt: prev = cnt # 同步更新最长段的首尾索引 max_start = current_start max_end = i - 1 cnt = 0 print(monets) print(f"最长连续'Eagle'长度:{prev}") print(f"最长连续序列首尾索引:{max_start}, {max_end}")
效果验证
针对你给出的测试用例['Tails', 'Eagle','Eagle','Tails','Eagle'],代码运行后会正确输出:
- 最长连续长度:2
- 首尾索引:1, 2
完全符合预期。
内容的提问来源于stack exchange,提问作者Mr.Marshal
相关产品推荐
相关产品推荐

