Python:统计元组列表中各元组在列表列表中的出现次数
统计元组在列表子列表中的出现次数(元素全包含即计数)
我来帮你搞定这个统计需求~核心思路很简单:只要元组的所有元素都存在于某个子列表中,就给该元组的计数加1,Python的集合子集判断特性刚好能完美适配这个场景。
先明确示例数据
mytuples = [(2,3), (3,6), (1,2)] mylist = [[1,2,3,4],[2,3,4,5],[2,3],[4,5,6]]
基础实现代码
我们可以用字典来存储每个元组的计数,遍历每个元组后,逐个检查子列表是否满足条件:
# 初始化结果字典,所有元组初始计数为0 result = {t: 0 for t in mytuples} # 遍历每个需要统计的元组 for tpl in mytuples: # 把元组转成集合,方便快速做子集判断 tpl_set = set(tpl) # 逐个检查每个子列表 for sublist in mylist: # 判断元组的所有元素是否都在子列表中 if tpl_set.issubset(set(sublist)): result[tpl] += 1 print(result)
运行结果
执行上面的代码后,会得到预期的输出:
{(2, 3): 3, (3, 6): 1, (1, 2): 1}
性能小优化
如果mylist里的子列表数量很多,每次循环都转换子列表为集合会有点浪费性能,我们可以提前把所有子列表转成集合存起来:
# 提前将所有子列表转换为集合,避免重复转换操作 sublist_sets = [set(sublist) for sublist in mylist] result = {t: 0 for t in mytuples} for tpl in mytuples: tpl_set = set(tpl) for s_set in sublist_sets: if tpl_set.issubset(s_set): result[tpl] += 1 print(result)
这样循环时就不用重复做集合转换,处理大量数据时效率会提升不少~
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

