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

如何统计list1元素在list2各字符串中的出现频率并导出为CSV?

解决列表元素频率统计与CSV保存问题

嘿,我来帮你搞定这个问题!首先得先说说你代码报错的核心原因——你在循环里把迭代变量命名成了list1和list2,这直接覆盖了原来的列表对象!比如第一次for list1 in list1执行后,list1就变成了字符串'cat',后续再循环的时候自然会报错,因为字符串没法被迭代。这是个很容易踩的新手坑,得先把变量名改对。

接下来咱们一步步实现需求:统计list1每个元素在list2各字符串中的出现频率,最后把结果存成指定格式的CSV。

步骤1:修正循环逻辑+正则匹配完整单词

首先要确保匹配的是完整单词(避免把dogs里的dog误统计),所以正则里要加单词边界\b,同时用re.escape()处理元素,防止元素里有正则特殊字符导致匹配出错。

import re
import csv

# 定义原始列表
list1 = ['cat', 'dog', 'man']
list2 = ['cat is sleeping', 'cat is running', 'cat and dogs is sleeping ', 'man dog cat is running']

# 初始化统计字典:键是list1的元素,值是对应每个句子的计数列表
frequency_counts = {item: [] for item in list1}

# 遍历每个句子
for sentence in list2:
    # 遍历每个要统计的元素
    for item in list1:
        # 正则匹配完整单词,转义特殊字符避免语法错误
        matched_items = re.findall(r'\b{}\b'.format(re.escape(item)), sentence)
        # 把当前句子的出现次数加入列表
        frequency_counts[item].append(len(matched_items))

步骤2:将统计结果写入CSV

按照你的要求,CSV的行是list1的元素,列是list2的每个字符串。我们可以直接用Python内置的csv模块来实现:

# 构建CSV表头:第一列是"元素",后续列是list2的每个句子
csv_header = ['元素'] + list2

# 构建每行数据:元素名 + 对应各句子的计数
csv_rows = []
for item in list1:
    csv_rows.append([item] + frequency_counts[item])

# 写入CSV文件(newline=''避免空行,utf-8保证编码正确)
with open('word_frequency.csv', 'w', newline='', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow(csv_header)
    writer.writerows(csv_rows)

最终CSV效果

生成的CSV内容大概是这样的:

元素,cat is sleeping,cat is running,cat and dogs is sleeping ,man dog cat is running
cat,1,1,1,1
dog,0,0,0,1
man,0,0,0,1

这里要注意:第三个句子里的dogs因为是复数,用\b边界匹配的话不会被统计成dog,如果你不需要区分单复数,可以去掉\b,但通常统计完整单词更符合需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:09:09