码迷,mamicode.com
首页 > 编程语言 > 详细

python3之数组(array)

时间:2018-11-18 11:37:59      阅读:421      评论:0      收藏:0      [点我收藏+]

标签:collect   表示   point   -128   random   文件   extend   add   cccccc   

当我们需要1000万个浮点数的时候,数组(array)的效率要比列表(list)要高得多,因为数组在背后存的并不是float对象,而是数字的机器翻译,也就是字节表述。这一点和c语言中的数组一样。

再比如说,如果需要频繁对序列做先出先进的操作,collection.deque(双端队列)的速度应该会更快。

1.数组

如果我们需要一个只包含数字的列表,那么array.array比list更高效。数组支持所有跟可变序列有关的操作,包括.pop,.insert和.extend。

另外,数组还提供从文件读取和存入文件的更快的方法,如.frombytes和.tofile。

Python数组跟C语言数组一样精简。创建数组需要一个类型码,这个类型码用来表示在底层的C语言应该存放怎样的数据类型。比如b类型码代表的是有符号的字符(signedchar),array(‘b‘)创建出的数组就只能存放一个字节大小的整数,范围从-128到127,这样在序列很大的时候,我们能节省很多空间。

array类型码如下:

Type code      C Type     Minimum size in bytes
     b    signed integer           1
     B    unsigned integer         1
     u    Unicode character        2 
     h    signed integer           2
     H    unsigned integer         2
     i    signed integer           2
     I    unsigned integer         2
     l    signed integer           4
     L    unsigned integer         4
     q    signed integer           8 
     Q    unsigned integer         8 
     f    floating point           4
     d    floating point           8

一个浮点型的数组的创建,存入文件和文件读取的过程:

>>> from array import array 
>>> from random import random
>>> floats = array(d, (random() for i in range(10**7)))
>>> floats[-1]
0.021901117799701275

>>> fp = open(floats.bin, wb)
>>> floats.tofile(fp)
>>> fp.close()

>>> floats_2 = array(d)
>>> fp = open(floats.bin, rb)
>>> floats_2.fromfile(fp, 10**7)
>>> fp.close()
>>> floats_2[-1]
0.021901117799701275

>>> floats_2 == floats
True
从python3.4开始,数组(array)类型不再支持诸如list.sort()这种就地排序方法。要给数组排序的话,得用sorted函数新建一个数组:
>>> import array
>>> a = array.array(a.typecode, sorted(a))

python3之数组(array)

标签:collect   表示   point   -128   random   文件   extend   add   cccccc   

原文地址:https://www.cnblogs.com/haoqirui/p/9977031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!