2018-10-22 023 不用列表 A
众所周知,列表是Python中序列类型最常用的一个(可能不如string?),但当我们面对各种各样的问题时,可能盲目地采用List并不占优势,比方说,要储存甚大量的数据,使用数组就会高效得多,这是Python内部储存方法的原因,很难通过优化算法来弥补这一差距;
下面我们介绍几种情况下替代List的数据类型:
数组 Array
当我们需要储存大量的数字,那么数组在使用时就会获得更高的效率,正如上面介绍的一样,数组在底层的储存上优势很大,我们很难通过对列表的神优化获得更高的效率;
数组另一个好处就是支持我们认为一个序列类型应该支持的几乎所有操作,包括.pop、.extend、.insert等等,同时,它在文件储存和读取上还有更高效率的方法,这里只简要介绍一下用法,究竟它们是怎么实现的,当我们涉及到文件操作时再说不迟;
数组在Python中不像C-Style语言中一样属于内置的数据类型,所以需要在前面加入一条import
语句,但和C-Style的语言一样,数组为了实现底层的高效储存读取,对储存的数据对类型做了严格的限制,我们不妨来看一条数组使用的例子:
1 from array import array
2 from random import random
3 Array_ints = array ('i',(1,2,4,5))
4 print(Array_ints)
5 print(Array_ints[2])
6 Array_floats = array ('d',(random() for i in range(0,10**7)))
7 print(Array_floats[-1])
这段代码的结果是:
array('i', [1, 2, 4, 5])
4
0.036011725516895465
我们来大约解释一下每一行的作用:
1:引入array类型,大约相当于C++中加入某个头文件;
2:引入random类型,作为取随机数的工具;
3:创建一个名叫Array_ints的数组,其类型码是'd';
4:输出;
5:用索引输出;
6:创建一个名叫Array_floats的数组,注意,这里使用迭代器一下创建了一千万个浮点数,这也是我为什么没有print(Array_floats)的原因;
7:输出这个数组倒数第一个元素;
注意,类型码要和数组的数据类型相对应,这也是为了在底层储存方便,我们胡乱打一个时候,会报出这样的错误:ValueError: bad typecode (must be b, B, u, h, H, i, I, l, L, q, Q, f or d)
,从这里我们也可以知道,在我们这个阶段,数组大约只能支持这么多的数据类型;
多说两句
本来打算分别介绍Python内置的四个卧槽类型的高阶用法,但看来看去元组的介绍都有点太偏重于我们称之为“微博记录法”的一个小用法,所以所谓的元组进阶就有点像列表的一个小拓展,所以我决定先写一写这一部分,至少告诉我自己:
嘿,别用列表上了瘾,还有那么多好东西呢!