如何统计TXT文件每行单词出现次数:'union'匹配行数统计错误问题
错误原因
- 统计包含
union的行的判断逻辑错误:你写的if line == line.count('union')中,line是该行分割后的单词列表,line.count('union')返回的是该行union出现的次数(整数),列表和整数永远不可能相等,所以判断永远不成立,line_count始终为0。 - 存在冗余的无效循环:最开始的
for line in file_data:循环在你还未给file_data填充内容时就执行,无实际作用可以直接删除。 - 统计总出现次数的循环变量命名有歧义:
for word in file_data:里的word实际是每行的单词列表,命名容易造成逻辑混淆,建议调整为line更合适。
修正后的代码
# Iterate through file_data and # compute your counts in this cell # --------------------------------- file_data = [] with open('/dsa/data/all_datasets/hamilton-federalist-548.txt', 'r') as file: line_count = 0 word_count = 0 # ------------ Add your code below -------------- # 读取文件内容,把每行分割成单词列表存入file_data for line in file: line = line.strip() split_line = line.split(' ') file_data.append(split_line) # 遍历每行统计数据 for line in file_data: # 计算当前行union的出现次数 union_cnt = line.count('union') # 只要出现次数大于0就说明该行包含union,行数加1 if union_cnt > 0: line_count += 1 # 总次数累加当前行的出现次数 word_count += union_cnt # ------------ =================== -------------- print('Lines: {}; Words: {}'.format(line_count, word_count))
修改说明
- 调整行判断逻辑为判断当前行
union出现次数是否大于0,符合统计包含目标单词行数的需求 - 合并行统计和总次数统计的两次循环为一次,减少不必要的遍历,提升代码运行效率
- 调整变量命名,避免逻辑歧义
内容的提问来源于stack exchange,提问作者user16443752
相关产品推荐
相关产品推荐

