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

统计列表中连续1-3个H的出现次数(排除更长连续)

更简洁的连续H统计方案

嘿,你提到的这种连续元素统计需求,用Python标准库的itertools.groupby来实现简直完美——完全不用写那种繁琐的“对比当前和前一个元素”的循环,代码简洁还高效!

核心思路

groupby会自动把列表中连续相同的元素归为一组,我们只需要遍历这些分组,筛选出元素为H的组,然后根据组的长度来统计对应次数(只统计长度1、2、3的,超过3的直接忽略)。

代码实现

基础版(直观易懂)

from itertools import groupby

target_list = ['C', 'C', 'H', 'H', 'E', 'H', 'C', 'C', 'C', 'H', 'H', 'C', 'H', 'H', 'H', 'H', 'C']
count_1h = count_2h = count_3h = 0

# 遍历所有连续元素组
for char, group in groupby(target_list):
    if char == 'H':
        # 计算当前连续H的长度
        consecutive_length = len(list(group))
        # 根据长度更新对应计数
        if consecutive_length == 1:
            count_1h += 1
        elif consecutive_length == 2:
            count_2h += 1
        elif consecutive_length == 3:
            count_3h += 1
        # 长度超过3的直接跳过,不统计

print(f"连续1个H出现: {count_1h}次")
print(f"连续2个H出现: {count_2h}次")
print(f"连续3个H出现: {count_3h}次")

进阶版(扩展性更强)

如果以后需要调整统计的长度范围,用字典来存计数会更灵活:

from itertools import groupby

target_list = ['C', 'C', 'H', 'H', 'E', 'H', 'C', 'C', 'C', 'H', 'H', 'C', 'H', 'H', 'H', 'H', 'C']
# 定义需要统计的长度及初始计数
counts = {1: 0, 2: 0, 3: 0}

# 生成所有连续H的长度列表
h_lengths = (len(list(group)) for char, group in groupby(target_list) if char == 'H')

# 遍历长度并更新计数
for length in h_lengths:
    if length in counts:
        counts[length] += 1

print(f"连续1个H出现: {counts[1]}次")
print(f"连续2个H出现: {counts[2]}次")
print(f"连续3个H出现: {counts[3]}次")

运行结果

两种代码都会输出和你例子一致的结果:

连续1个H出现: 1次
连续2个H出现: 2次
连续3个H出现: 0次

为什么这个方法更优?

  • 代码简洁:省去了手动维护“前一个元素”“当前连续长度”等变量的繁琐逻辑,可读性拉满
  • 效率高效:只需要遍历原列表一次,时间复杂度是O(n),和手动循环效率一致,但代码量少很多
  • 扩展性好:如果以后要统计其他长度(比如连续4个H),只需要修改计数规则就行,不用大改循环逻辑

内容的提问来源于stack exchange,提问作者Haj Sai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:03:42