Python3.2官方文档翻译-列表工具跟十进制浮点数计算
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