Python:统计元组在列表集合中的子集出现次数(扩展问题)
统计元组作为子集在列表列表中的出现次数
这是「Python - 在列表的列表中查找元组」问题的扩展,核心需求是对比两组数据:一组元组、一组列表,统计每个元组作为子集出现在目标列表中的次数。
高效实现方案
我采用了预转换集合的方式来优化性能,避免嵌套循环里重复转换的冗余开销,代码如下:
# 输入数据 tuples = [(2,3), (3,6), (1,2)] lists = [[1,2,3,4],[2,3,4,5],[2,3],[4,5,6]] # 一次性转换所有元组和列表为集合,减少重复计算 subsets = {t : set(t) for t in tuples} mainsets = [set(xs) for xs in lists] # 用字典推导式快速生成统计结果 tallies = { tup : sum(s.issubset(m) for m in mainsets) for tup, s in subsets.items() }
思路说明
- 预转换优化:把所有元组和列表提前转成集合,这样在后续的子集判断环节,不用每次循环都执行转换操作,尤其当数据量较大时,能明显提升效率。
- 简洁统计逻辑:利用集合的
issubset()方法判断元组对应的集合是否是列表对应集合的子集,sum()函数会把布尔值True/False自动转为1/0,直接累加得到每个元组的出现次数,最后用字典推导式直接输出「元组-次数」的映射结果。
运行这段代码后,tallies的结果为:{(2, 3): 3, (3, 6): 1, (1, 2): 1},完全符合需求。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

