请求实现Python中子列表内连续词出现次数统计功能
解决Python统计连续词对次数的需求
Hey there! 作为Python新手,这个统计跨子列表连续词对次数的需求其实很好实现,我来一步步帮你搞定,代码里会加详细注释,保证你能看懂~
先明确核心需求:
- 遍历输入列表中的每一个子列表
- 提取每个子列表里的连续有序词对(比如子列表
["word1", "word2","word1"]会生成("word1", "word2")和("word2", "word1")两个词对) - 跨所有子列表累计每个词对的出现次数
- 最终转换成你指定的格式:每个词对对应一个包含两个词和次数的集合
实现代码(带详细注释)
from collections import defaultdict # 你的输入列表 input_list = [["word1", "word2"],["word1", "word2","word1"], ["word4", "word5","word4", "word5", "word2", "word3"]] # 初始化统计字典:键是有序词对(tuple类型,因为不可变才能当字典键),值是出现次数 pair_count = defaultdict(int) # 第一步:遍历所有子列表,统计词对次数 for sublist in input_list: # 遍历子列表中的元素,生成连续词对(要取i和i+1,所以循环到len(sublist)-2) for i in range(len(sublist) - 1): current_word = sublist[i] next_word = sublist[i+1] # 把连续两个词打包成有序元组作为字典的键 word_pair = (current_word, next_word) # 对应词对的次数加1 pair_count[word_pair] += 1 # 第二步:把统计结果转换成你需要的格式 out = [] for pair, count in pair_count.items(): # 将词对的两个元素和次数放入集合,添加到结果列表 out.append({pair[0], pair[1], count}) # 打印验证结果 print(out)
运行结果
执行代码后会输出和你预期完全一致的内容:
[{'word1', 'word2', 2}, {'word2', 'word1', 1}, {'word4', 'word5', 2}, {'word5', 'word4', 1}, {'word5', 'word2', 1}, {'word2', 'word3', 1}]
关键部分解释
defaultdict(int)的作用:这是Python标准库collections提供的工具,能自动将新键的初始值设为0,省去了手动判断键是否存在的步骤,让统计逻辑更简洁。- 用元组存储词对:因为列表是可变类型,不能作为字典的键,而元组是不可变的,刚好适合用来存储有序词对,确保
("word1", "word2")和("word2", "word1")被当成两个不同的词对统计。 - 普通字典替代方案:如果你不想导入
collections,可以用普通字典实现统计,逻辑是一样的:
pair_count = {} for sublist in input_list: for i in range(len(sublist) - 1): word_pair = (sublist[i], sublist[i+1]) if word_pair in pair_count: pair_count[word_pair] += 1 else: pair_count[word_pair] = 1
内容的提问来源于stack exchange,提问作者GEEK
相关产品推荐
相关产品推荐

