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

如何不使用index()函数获取列表最后重复序列的起始索引

解决获取列表最后重复序列起始索引的问题

问题说明

需要实现一个函数,获取列表中最后一组连续重复元素序列的起始索引,例如列表[2, 7, 3, 3, 3, 1, 1]中该索引为5,且不能使用内置的index()函数。现有代码在编写内层循环时遇到阻碍,不知道如何终止内层循环并回到外层循环。

原代码的问题

原代码从列表头部开始遍历,逻辑方向错误(我们需要找最后一组重复序列,从尾部遍历更直接),且初始index=0时访问l[index-1]会直接触发索引越界错误,同时没有处理多组重复序列的筛选逻辑。

可行实现方案

不需要复杂的内外层嵌套循环,直接从列表尾部往前遍历,找到第一个当前元素与前一个元素不同的位置,该位置的下一个索引就是最后重复序列的起始点。如果整个列表都是重复元素,直接返回0即可。

代码实现

def get_index_of_last_repeating_sequence(l: list[int]) -> int:
    # 处理空列表或单元素列表(无重复序列,可根据需求调整返回值)
    if len(l) < 2:
        return -1
    
    # 从倒数第二个元素开始向前遍历
    i = len(l) - 2
    while i >= 0 and l[i] == l[i + 1]:
        i -= 1
    
    # 循环结束后,i+1即为最后重复序列的起始索引
    return i + 1

代码验证

测试示例:

print(get_index_of_last_repeating_sequence([2, 7, 3, 3, 3, 1, 1]))  # 输出5
print(get_index_of_last_repeating_sequence([5,5,5]))  # 输出0
print(get_index_of_last_repeating_sequence([1,2,3,4]))  # 输出-1(无重复序列)
print(get_index_of_last_repeating_sequence([9,8,8,7,7,7]))  # 输出3

逻辑解释

  1. 先处理边界情况:列表长度小于2时,不存在重复序列,返回-1(可根据实际需求调整返回值)。
  2. 从列表倒数第二个元素开始向前遍历,只要当前元素和后一个元素相同,就继续往前移动索引。
  3. 当遇到第一个和后一个元素不同的位置时,循环终止,此时i+1就是最后一组连续重复元素的起始索引。
  4. 如果整个列表都是相同元素,循环会一直走到i=-1,返回i+1=0,符合预期。

这种方式无需嵌套循环,逻辑简单直接,既避免了原代码的索引越界问题,又高效完成需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:55:25