如何在Python频率表中排除指定字符?
实现带排除列表的字符频率统计
这里给你调整后的代码,直接支持排除指定字符,同时优化了原代码里的冗余逻辑:
from collections import Counter # 定义需要排除的字符集合,可根据需求修改 exclude_chars = {'\n', ' ', ',', '.'} # 读取文件并过滤排除字符 with open('test.txt', 'r') as file: # 读取后直接过滤掉排除列表里的字符 data = ''.join([char for char in file.read() if char not in exclude_chars]) # 直接用Counter统计字符频率,比原方法更高效 frequency_table = Counter(data) # 转换为按频率排序的元组列表(字符, 出现次数) res = frequency_table.most_common() # 计算总字符数,用于百分比计算 total_chars = sum(frequency_table.values()) # 输出结果 print(f"Character frequency table for '{data}' is :\n{dict(frequency_table)}") print("Frequency Tuple list : " + str(res)) # 示例:计算第一个字符的出现百分比(避免除以0的情况) if total_chars > 0: print(f"First character percentage: {res[0][1]/total_chars * 100:.2f}%")
关键改动说明:
- 排除列表实现:通过列表推导式在读取文件后直接过滤掉
exclude_chars里的字符,确保这些字符不会进入统计流程 - 优化频率统计:原代码先转集合再用
data.count()循环统计,效率较低(时间复杂度O(n²)),改用Counter(data)直接统计,时间复杂度O(n),性能更优 - 修复元组生成逻辑:原代码错误地对
frequency_table再用一次Counter,现在直接调用most_common()就能得到按频率排序的(字符, 次数)元组列表 - 百分比计算优化:先计算总字符数,避免原代码里无意义的
res[1][1]/res[1][1],同时增加了除以0的判断,防止报错
你可以根据自己的需求修改exclude_chars里的内容,比如要排除数字就加上'0','1',...或者直接用str.digits。
内容的提问来源于stack exchange,提问作者Andreas w
相关产品推荐
相关产品推荐

