大数据量下Python同住宅男女匹配的性能优化方案咨询
高效解决方案分析与实现
问题根源
原方案的性能瓶颈在于第二次循环中对每个符合条件的男性,都要遍历整个women列表执行filter匹配,时间复杂度为O(K*N)(K是men_new的长度,N是women的总长度),大数据量下会导致极慢的运行速度。
优化思路
利用哈希表(Python字典)的O(1)查找特性,预先将women列表中的对象以**(行政区, 房屋编号)**作为唯一键存入字典,之后筛选男性时可直接通过键快速匹配对应女性,将整体时间复杂度降至O(M+N)(M是men的长度,N是women的长度)。
实现代码
# 假设列表"men"、"women"及变量"min_age"已预先定义 men_new = [] women_new = [] # 第一步:构建女性匹配字典,键为(district, house_number) women_map = {(woman.district, woman.house_number): woman for woman in women} # 第二步:筛选男性并同时匹配女性 for man in men: if man.age > min_age: men_new.append(man) # 通过字典直接获取对应女性(题目说明每套住宅住1男1女,故必有匹配) women_new.append(women_map[(man.district, man.house_number)])
额外说明
- 若存在数据异常(比如部分男性无对应女性),可改用
get方法做容错处理:women_map.get((man.district, man.house_number), None) - 字典构建仅需遍历
women一次,后续匹配均为常数时间操作,相比原方案性能提升量级显著,尤其适合百万级以上数据量场景。
内容的提问来源于stack exchange,提问作者Alexander Fedorov
相关产品推荐
相关产品推荐

