如何解释统计二维数组元素频率的一行代码中的Counter与map逻辑?
一行Python代码统计二维数组元素频率的执行逻辑解析
先看要解析的目标代码:
count = defaultdict(int, sum(map(Counter, board), Counter()))
其中board是List[List[str]]类型的二维数组,下面拆解每一部分的执行逻辑:
map(Counter, board):
遍历board里的每一个子数组,把Counter函数逐个作用在子数组上。每个子数组会被转换成一个Counter对象,这个对象会统计该子数组内各元素的出现次数。比如子数组["A", "B", "A"]会被转为Counter({"A": 2, "B": 1})。sum(map(...), Counter()):sum函数在这里用来累加所有由map生成的Counter对象。必须指定第二个参数Counter()(空计数器)作为累加初始值——因为Counter类支持加法操作,两个Counter相加时,相同元素的计数会被求和,不同元素则保留各自的计数。如果不指定初始值,sum默认用0作为初始值,和Counter相加会触发类型错误。defaultdict(int, ...):
把前面累加得到的总Counter对象传入defaultdict(int)的构造函数,将Counter的键值对全部导入到defaultdict中。最终得到的count是默认值为0的字典,既包含board中所有元素的出现频率,同时访问不存在的元素时会返回0,和你给出的双层循环写法完全等价。
内容的提问来源于stack exchange,提问作者Gloria1009
相关产品推荐
相关产品推荐

