Python中如何判断列表包含元组全部元素并统计匹配次数
高效实现方案
原有代码的问题
- 判断条件逻辑完全错误:
tup[0] in list_a是判断元素是否存在于整个list_a列表,而非当前遍历的子列表;tup[1] in list_b更是错误判断到元组列表中,所以输出结果全部不符合预期。 - 没有利用数据结构优化查询效率:Python列表的
in查询是O(n)复杂度,子列表长度越长、数量越多,重复查询的性能损耗越大。
核心优化思路
预先把list_a的所有子列表转换为集合,集合的in查询是O(1)复杂度,可大幅降低重复判断的时间开销。
完整实现代码
list_a = [[2,6,7,1], [1,9,4],[2,6,7], [4,1,6,2,8,9,3]] list_b = [(1,2), (6,9), (2,7)] # 预转换子列表为集合,仅需执行一次 set_a = [set(sublist) for sublist in list_a] for tup in list_b: x, y = tup counter = 0 for sub_idx, sub_set in enumerate(set_a): has_both = x in sub_set and y in sub_set counter += has_both # 输出逐行匹配结果 print(f"{tup} in {list_a[sub_idx]} = {has_both}") # 输出总匹配次数 print(f"{tup} occurrence count = {counter}")
运行后输出和参考效果完全一致。
更简洁的列表推导写法
如果只需要统计总次数,不需要逐行输出匹配结果,可以用列表推导简化:
set_a = [set(sublist) for sublist in list_a] count_result = { tup: sum(1 for s in set_a if tup[0] in s and tup[1] in s) for tup in list_b } # 直接输出各元组的匹配次数 print(count_result)
内容的提问来源于stack exchange,提问作者Kalanchoe345
相关产品推荐
相关产品推荐

