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

Python中如何统计字符串内列表中子字符串的总出现次数?

解决字符串中统计多子串总出现次数的问题

嘿,我明白你的需求啦——你想统计一个字符串里,某个列表中所有子字符串的出现总次数,但str.count()只能接受单个字符串参数,直接传列表肯定会报错对吧?别担心,这里有几种简单的解决方案:

方法一:循环累加(最直观)

遍历列表里的每个子串,分别调用count()方法,然后把结果加起来就行。另外提醒一下,尽量别用list和str当变量名哦,它们是Python的内置类型,容易覆盖内置功能出问题:

target_substrings = ['one', 'two', 'three']
input_str = "one one two four five six"
total_count = 0

for sub in target_substrings:
    total_count += input_str.count(sub)

print(total_count)  # 输出:3,正好符合你的期望

方法二:生成器表达式+sum(更简洁)

用Python的生成器表达式配合sum()函数,一行代码就能搞定,看起来更清爽:

target_substrings = ['one', 'two', 'three']
input_str = "one one two four five six"

total_count = sum(input_str.count(sub) for sub in target_substrings)
print(total_count)  # 同样输出:3

方法三:正则表达式(处理重叠匹配场景)

如果你的子串存在重叠匹配的情况(比如字符串是"aaaa",列表里有"aa",用上面的方法会得到2,但实际重叠的话是3次),那可以用正则表达式来处理:

import re

target_substrings = ['one', 'two', 'three']
input_str = "one one two four five six"

# 用|分隔所有子串,同时用re.escape转义特殊字符,避免正则语法冲突
pattern = '|'.join(re.escape(sub) for sub in target_substrings)
# findall会返回所有匹配的子串列表,长度就是总次数
total_count = len(re.findall(pattern, input_str))

print(total_count)  # 输出:3

这个方法的好处是能处理更复杂的匹配场景,比如子串里包含.、*这类正则特殊字符时,re.escape()会帮你转义,避免匹配出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:47:40