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

如何使用列表推导式实现计数器累加 统计列表中子列表的出现次数

子列表出现次数统计的列表推导式实现

你不需要在列表推导式内部维护计数器累加,直接对匹配成功的项做求和即可,同时还要修正你原来写的推导式里的切片错误。

首先给出完整的可运行实现:

def count_sublist_occurrence(sublst, lst):
    sub_len = len(sublst)
    # 生成器表达式实现,也可以换成[1 for ...]的列表推导式实现
    return sum(1 for i in range(len(lst) - sub_len + 1) if lst[i:i+sub_len] == sublst)

实现说明

  • 原写法的切片lst[i : len(sublst) + 1]存在错误,正确的切片范围应该是从索引i开始,取和子列表等长的片段,即lst[i:i+len(sublst)]
  • 循环范围优化:只需要遍历到len(lst) - sub_len + 1即可,超出这个范围的索引取到的切片长度小于子列表,不可能匹配成功,能减少无效遍历
  • 计数逻辑:匹配成功时生成1,用sum()直接对所有生成的1求和,得到的就是匹配总次数,不需要额外声明计数器变量

效果验证

传入示例参数测试:

>>> count_sublist_occurrence([1, 2], [1, 2, 3, 1, 2, 3])
2

运行结果和原逻辑完全一致。

如果一定要用显式的列表推导式而不是生成器表达式,写法如下:

def count_sublist_occurrence(sublst, lst):
    sub_len = len(sublst)
    return sum([1 for i in range(len(lst) - sub_len + 1) if lst[i:i+sub_len] == sublst])

两种写法效果一致,生成器表达式内存占用更低,更推荐使用。

内容的提问来源于stack exchange,提问作者Bryan Hii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:36:04