流畅的 Python 阅读记录二:列表
主要是 列表 的一些知识
1. 要避免错误的初始化赋值
# GOOD
board = [['_'] * 3 for i in range(3)]
# WRONG
board = [['_'] * 3] * 3
print(board)
# output: ['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']
board[1][2] = 'X'
print(board)
# output: ['_', '_', 'X'], ['_', '_', 'X'], ['_', '_', 'X']
2. 用 bitsec 管理已经排序的 列表,这样插入、寻找等等都快一些
3. 替代 列表 的场景
- 只包含数字, 使用 array 更好, 存读文件都更加无比快速
floats = arrary('d', (random() for i in range(10**7))) fp = open('floats.bin', 'wb') floats.tofile(fp) fp = open('floats.bin', 'rb') floats.fromfile(fp, 10**7)
- 涉及多维, 使用 Numpy
- 双向队列(deque)或者其他队列
# 使用 MAXLEN,以后如果增加数量超过 10,就会自动进行出队入队 dq = deque(range(10), maxlen = 10) dq.extend([111, 112]) dq.appendleft(-1)