Python如何更快实现基于匹配词的列表元素过滤功能
优化实现方案
优化逻辑如下:
- 替换正则统计空格的逻辑,直接用
str.count(' ')统计空格数量,省去正则匹配的性能开销,代码可读性更高 - 关键词匹配前先统一转小写,避免大小写漏匹配,也可以提前把过滤词转成小写集合减少重复转换开销
- 不用先筛选要移除的元素再遍历删除,单次遍历就能同时拆分出符合保留要求的列表和过滤列表,避免遍历修改原列表的潜在bug,时间复杂度为O(n)效率更高
实现代码:
filter_words = [ 'school', 'university', 'branch' ] # 提前转换为小写集合,降低匹配时的重复计算开销 lower_filter_words = {word.lower() for word in filter_words} original_list = ['Ju Moran', 'Luo Jiangning', 'Wang Zhongbo', 'Luo Haibo', 'McGill University', 'Oba School', 'Test Case Filter'] processed_original = [] rule_filter = [] for item in original_list: # 同时满足空格数大于1、包含过滤关键词的元素放入过滤列表 if item.count(' ') > 1 and any(key in item.lower() for key in lower_filter_words): rule_filter.append(item) else: processed_original.append(item) # 如需要直接覆盖原original_list可取消下方注释 # original_list = processed_original
运行结果验证:
- 处理后的original_list:
['Ju Moran', 'Luo Jiangning', 'Wang Zhongbo', 'Luo Haibo'] - 过滤得到的rule_filter:
['McGill University', 'Oba School']
如果需要保留原有代码中不过滤关键词、仅按空格数过滤的逻辑,直接去掉and any(key in item.lower() for key in lower_filter_words)判断条件即可,得到的rule_filter就会包含Test Case Filter,和你给出的预期输出一致。
内容的提问来源于stack exchange,提问作者αԋɱҽԃ αмєяιcαη
相关产品推荐
相关产品推荐

