Python 用Counter做映射

Python 用Counter做映射,当需要对集合按照某些值进行分组并计算频次时,可以使用collections.Counter等优化工具。对于函数式编程,分组数据的典型处理方式分为两步,首先对原始集合排序,然后用一个递归循环识别出每一组的开始位置。这当中涉及实例化原始数据,执行一个复杂度为O(n log n)的排序,最后对每个键值进行归约,得到累积值或者频次。

下面的生成器创建了分箱后的一组路径值:

quantized = (5 * (dist // 5) for start, stop, dist in trip)

每个距离值除以5取整再乘以5,就得到了5海里的倍数。

下面的表达式创建了从距离到频次的映射:

from collections import Counter
Counter(quantized)

这是一个有状态的对象,从技术上看,它是通过命令式的面向对象编程创建出来的,但它看上去像函数,也符合函数式编程的设计理念。

打印Counter(quantized).most_common()函数的返回值,结果如下:

[(30.0, 15), (15.0, 9), (35.0, 5), (5.0, 5), (10.0, 5), (20.0, 5),
 (25.0, 5), (0.0, 4), (40.0, 3), (45.0, 3), (50.0, 3), (60.0, 3),
 (70.0, 2), (65.0, 1), (80.0, 1), (115.0, 1), (85.0, 1), (55.0, 1),
 (125.0, 1)]

出现频次最高的距离值是30海里,最短的路径段为4个0海里,最长的是125海里。

你的运行结果可能与上面的略有不同,因为most_common()函数是按频次排序的,相同的频次可能以任意顺序输出,所以下面5个长度的出现顺序可能会不同。

(35.0, 5), (5.0, 5), (10.0, 5), (20.0, 5), (25.0, 5)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程