虽然列表既灵活又简单,但面对各类需求时,我们可能会有更好的选择。本文记录 Python 中不同场景应该选择的列表结构。
如果我们需要一个只包含数字的列表,那么 array.array
比 list 更 高效。数组支持所有跟可变序列有关的操作,包括 .pop
、.insert
和 .extend
。另外,数组还提供从文件读取和存入文件的更快的方法,如 .frombytes
和 .tofile
。
from array import array
from random import random
from time import time
start = time()
floats = array('d', (random() for i in range(10**7)))
fp = open('floats.bin', 'wb')
floats.tofile(fp)
fp.close()
print(f"write time {time() - start}")
start = time()
floats2 = array('d')
fp = open('floats.bin', 'rb')
floats2.fromfile(fp, 10**7)
fp.close()
print(f"read time {time() - start}")
print(floats2 == floats)
-->
write time 3.478039026260376
read time 0.437427282333374
True
通过改变数组中的一个字节来更新数组里某个元素的值
import array
numbers = array.array('h', [-2, -1, 0, 1, 2])
memv = memoryview(numbers)
print(len(memv))
memv_oct = memv.cast('B')
print(memv_oct.tolist())
memv_oct[5] = 4
print(numbers)
-->
5
[254, 255, 255, 255, 0, 0, 1, 0, 2, 0]
array('h', [-2, -1, 1024, 1, 2])