如何最简/快速初始化10×100000的None多维数组?
10×100,000数组的最简/最快初始化方案
嘿,这个问题问到点子上了!在Python里初始化二维数组,既要简洁高效,还得避开浅拷贝引用的坑——毕竟你已经知道[None,] * cols是初始化单列的好办法,但直接嵌套乘法会踩雷。下面分两种场景给你最优方案:
一、纯Python环境(无需第三方库)
最简且安全的写法
如果你要的是每行独立的列表(避免改一行全变的问题),用列表推导式是最优选择:
rows = 10 cols = 100000 arr = [[None] * cols for _ in range(rows)]
为什么不能用[[None]*cols]*rows?因为后者的所有行其实都是同一个列表的引用!比如你修改arr[0][0] = 5,会发现所有行的第一个元素都变成5——这是因为外层乘法只是复制了列表的引用,而非创建新列表。而列表推导式会为每一行生成一个全新的[None]*cols列表,完全安全。
速度优化小细节
[None] * cols本身是Python里初始化固定值列表最快的方式之一(底层直接分配内存,而非循环逐个添加),搭配推导式的10次循环,整体效率已经非常高,几乎没有额外开销。
二、追求极致速度(适合数值运算场景)
如果你的数组后续要做数值计算,直接用numpy会比纯Python列表快几个数量级,初始化也更高效:
import numpy as np arr = np.full((10, 100000), None) # 生成object类型数组,存储None # 如果是数值类型(比如0、1),用专用函数会更快: # arr = np.zeros((10, 100000), dtype=int) # arr = np.ones((10, 100000), dtype=float)
numpy的初始化函数是底层C实现的,处理大尺寸数组时优势明显,而且后续的切片、运算操作都比纯Python列表高效得多。
总结
- 纯Python下最简+安全:列表推导式
[[None]*cols for _ in range(rows)] - 追求最快速度:优先用numpy的专用初始化函数
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

