如何遍历列表A匹配列表B中包含其元素的项并生成指定字典列表
解决方案
为什么zip函数无法满足需求
zip(A,B) 会按照索引位置一一配对两个列表的元素,只有当A和B的元素顺序完全匹配时才能得到正确结果,你当前两个列表顺序不对应,自然无法拿到正确配对。
基础实现方案
嵌套两次循环即可完成匹配,输出顺序和A的顺序保持一致:
dict_list = [] for a in A: for b in B: if a in b: dict_list.append({'prefix': a, 'shape': b}) # 若每个a仅对应一个b,找到后添加break跳出内层循环,提升效率 break
提示:如果单个a可能匹配多个B中的元素,删除上述代码中的
break即可保留所有匹配结果。
千条以上数据的性能优化方案
当两个列表数据量较大时,嵌套循环的O(n*m)时间复杂度会导致性能偏低,可以用生成器表达式优化查询逻辑:
dict_list = [] for a in A: # 查找B中第一个包含a的元素,未匹配到则返回None跳过 matched_b = next((b for b in B if a in b), None) if matched_b: dict_list.append({'prefix': a, 'shape': matched_b})
上述逻辑完全适配你补充的URL匹配场景,in判断子串存在不限制子串的位置,不管是前缀、中间还是后缀片段都可以正常匹配。
内容的提问来源于stack exchange,提问作者S.Slusky
相关产品推荐
相关产品推荐

