8.7 列表工具
许多数据结构需要通过内置列表类型来满足。但,有时候在不同的性能取舍需要选择一个实现。
Array模块能提供一个像列表的array对象,它只能存储同类数据而且更加简洁。
接下来样例展示了一个数字数组。
存储是2个字节的无标识的二进制数据而不是在python对象中普通列表中的每一个16字节的值。
>>> from array import array
>>> a = array(’H’, [4000, 10, 700, 22222])
>>> sum(a)
26932
>>> a[1:3]
array(’H’, [10, 700])
Collections模块通过方法depue()提供了一个类似列表对象。它从左边開始能更加高速加入和删除,可是在中间查询时非常慢。这些对象非常适合实现队列和广度优先查询。
除了取代列表实现之外。标准库还提供了其它工具,比方处理排序列表的bisect模块。
>>> import bisect
>>> scores = [(100, ’perl’), (200, ’tcl’), (400, ’lua’), (500, ’python’)]
>>> bisect.insort(scores, (300, ’ruby’))
>>> scores
[(100, ’perl’), (200, ’tcl’), (300, ’ruby’), (400, ’lua’), (500, ’python’)]
Headpq模块为基于正规列表的堆实现提供了函数。
最小的值入口总是在位置0上。这对那些希望反复訪问最小元素而不像做一次完毕列表排序的应用过程序非常实用。
>>> from heapq import heapify, heappop, heappush
>>> data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
>>> heapify(data) # rearrange the list into heap order
>>> heappush(data, -5) # add a new entry
>>> [heappop(data) for i in range(3)] # fetch the three smallest entries
[-5, 0, 1]
8.8 十进制浮点数计算
十进制模块提供了对十进制浮点数计算的Decimal数据类型。
相比于内置的二进制float浮点实现,此类更加有助于下面情况:
l 须要精确十进制位数表示的財务系统或者其它用途。
l 控制精度
l 控制保留位数以来满足法律或者管理需求
l 重大十进制数的跟踪
l 那些用户想要控制数学计算结果的应用程序
比如,计算在70美分电话费中5%的税收,在十进制和二进制浮点数不同可能导致不同额结果。
假设要对最接近的分钟数进行舍入,这样的区别就变得非常重要。
Decimal模块为算术运算提供了高精度的须要
>>> from decimal import*
>>> round(Decimal(’0.70’)*Decimal(’1.05’), 2)
Decimal(’0.74’)
>>> round(.70*1.05, 2) 0.73
本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4642733.html,如需转载请自行联系原作者