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

如何找出列表中最长的连续相同元素序列的长度?

如何找出列表中最长的连续相同元素序列的长度?

你遇到的这个问题太常见了!确实,collections.Counter只能帮你统计每个元素总共出现了多少次,完全不管是不是连续的。用循环来实现其实特别直观,我给你两种靠谱的写法:

方法一:基础手动循环实现

这是最容易理解的方式,完全靠自己控制遍历和计数逻辑:

首先得考虑边界情况——如果列表是空的,直接返回0就行。如果列表非空,咱们初始化两个变量:current_length用来记录当前正在统计的连续序列长度,max_length用来存目前找到的最长序列长度,一开始都设为1(因为至少有一个元素嘛)。

然后从列表的第二个元素开始,逐个和前一个元素对比:

  • 如果和前一个元素相同,就把current_length加1,同时更新max_length(取它自己和current_length里更大的那个)
  • 如果不一样,说明当前连续序列断了,把current_length重置回1

代码示例:

def longest_consecutive_length(nums):
    if not nums:
        return 0
    max_length = current_length = 1
    for i in range(1, len(nums)):
        if nums[i] == nums[i-1]:
            current_length += 1
            if current_length > max_length:
                max_length = current_length
        else:
            current_length = 1
    return max_length

# 用你的测试列表试试
test_list = [1, 1, 2, 2, 2, 3, 3]
print(longest_consecutive_length(test_list))  # 输出3,正好是你要的结果

方法二:用itertools.groupby简化代码

如果你不想写那么多循环逻辑,Python标准库的itertools.groupby可以帮你把连续的相同元素自动分组,然后咱们只需要统计每个组的长度,再取最大的那个就行。虽然不是纯手动写循环,但代码更简洁,也很Pythonic:

from itertools import groupby

def longest_consecutive_length(nums):
    if not nums:
        return 0
    # 用groupby分组后,每个组的长度就是连续序列的长度,取最大的那个
    return max(len(list(group)) for key, group in groupby(nums))

test_list = [1, 1, 2, 2, 2, 3, 3]
print(longest_consecutive_length(test_list))  # 同样输出3

两种方法都能解决你的问题,如果你想练手循环逻辑,就用第一种;如果追求代码简洁,第二种肯定更省心。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 08:35:29