列表 vs. 数组
2019-08-03 本文已影响0人
钢笔先生
Time: 2019-08-03
列表的好处
列表就是指list
,数组是array
。
列表用起来灵活,简单。
但是从效率和不同的场景来说,可以有其他的选择。比如:
- 1000万个浮点数时,用数组
array
效率要更高。 - 频繁的先入先出操作,双端队列
deque
更适合,因为速度更快。 - 检查元素是否在集合中,使用
set
更合适,因为set
为检查元素做过优化。
虽然这两个场景中,列表都可以完成。
避免过度使用列表,要综合考虑问题。
列表和数组的区别
首先,我们需要知道列表本身是可以存储不同类型的。
数组中的元素类型必须相同,因为它的底层存储方式是和C一样的。
array.array
Python数组与C语言数组一样精简。
注意,创建数组需要一个类型码。
类型码用于表示在底层的C语言应该存储的数据类型。
array.array的类型码
类型码 | C类型 | 最小尺寸(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)))
# 存入文件
fp = open('floats.bin', 'wb')
floats.tofile(fp)
fp.close()
floats2 = array('d')
# 读取二进制文件
fp = open('floats.bin', 'rb')
floats2.fromfile(fp, 10**7)
fp.close()
用二进制方式读取比文本方式读取快60倍,写二进制比写文本文件快7倍。且占用空间要更少。
Python的
pickle
模块可以用于快速序列化数字类型。
END.