首页 > 解决方案 > 使用理解/lambda 表达式获取嵌套整数列表的元素出现次数

问题描述

刚刚浏览了列表、字典、集合理解和理解的 lambda 表达式,但我无法使用它们来捕获嵌套列表中整数的出现次数,如下例所示。那么,是否有一个带有理解或 lambda 表达式的解决方案来计算它,或者它是否超出了此类构造的能力?如果不可能,那么为什么不能用理解/ lambda 表达式来实现它的直觉是什么?

lst = [[0,1],[1,2],[3,4],[0,5]]
result = {0:2, 1:2, 2:1, 3:1, 4:1, 5:1}

我目前正在使用双 for 循环来进行计算。

标签: python

解决方案


生成器表达式、列表推导等的构造非常适合单独映射序列中的项目。它们根本不用于聚合,这是您在此处尝试执行的操作,即组合多个项目的值。

出于您的目的,您可以使用collections.Counter(它对计数项目进行聚合)和生成器表达式来代替嵌套列表:

from collections import Counter
dict(Counter(i for s in lst for i in s))

这将返回:

{0: 2, 1: 2, 2: 1, 3: 1, 4: 1, 5: 1}

推荐阅读