Python域名列表精确求交集 处理|分隔多域名 规避in/re.search
Python 精确匹配两域名列表公共项实现
问题说明
- 输入为两个通过
readlines()读取域名文件得到的原始列表,基础样例:
a = ['abc.com','cde.com','efg.com'] b = ['yabc.com','cde.com','abce.com','efg.com']
- 匹配规则:
- 必须完整精确匹配,禁止部分匹配,上述样例期望输出公共域名为
['cde.com','efg.com'] - 两个列表元素无固定顺序
- 必须完整精确匹配,禁止部分匹配,上述样例期望输出公共域名为
- 特殊场景:文件部分行包含多个以
|分隔的域名,readlines()会将这类行读取为单个字符串(例如['abc.com|cde.com|efg.com\n','xyz.com']),直接匹配会漏掉拆分后的独立域名 - 实现约束:禁止使用
in、re.search类包含/正则匹配逻辑
实现代码
第一步:编写统一预处理函数
处理换行符、|分隔多域名场景,将原始列表转换为存储单个独立域名的集合,集合的哈希存储特性天然支持精确相等判定,不会出现部分匹配问题:
def clean_raw_domains(raw_lines: list[str]) -> set[str]: valid_domains = set() for line in raw_lines: stripped_line = line.strip() if not stripped_line: continue split_domains = stripped_line.split('|') for domain in split_domains: d = domain.strip() if d: valid_domains.add(d) return valid_domains
第二步:求精确交集
利用集合的位与运算求交集,运算逻辑基于元素哈希值完全相等判定,完全符合精确匹配要求,不会触发禁止使用的匹配逻辑:
domains_a = clean_raw_domains(a) domains_b = clean_raw_domains(b) common_domains = list(domains_a & domains_b)
效果验证
- 基础样例运行输出为
['cde.com', 'efg.com'],完全符合预期 - 带
|分隔多域名、带换行符的原始读取结果,经预处理后会被拆分为独立域名参与匹配,无漏匹配问题 - 不受列表原始顺序影响,可自动去除单个列表内的重复域名
内容的提问来源于stack exchange,提问作者Mr.V
相关产品推荐
相关产品推荐

