Skip to content

流畅的 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)
    

Comments