如果要创建一维数组,可以将其实现为列表,或者使用标准库中的“array”模块。我一直对一维数组使用列表。
我想改用数组模块的原因或情况是什么?
是为了性能和内存优化,还是我错过了一些明显的东西?
基本上,Python 列表非常灵活,可以保存完全异构的任意数据,并且可以非常有效地附加它们摊余常数时间 http://en.wikipedia.org/wiki/Dynamic_array#Geometric_expansion_and_amortized_cost。如果您需要高效且轻松地缩小和增加清单,那么它们就是您的最佳选择。但他们使用比 C 数组多得多的空间,部分原因是列表中的每个项目都需要构造一个单独的 Python 对象,即使对于可以用简单 C 类型表示的数据(例如float
or uint64_t
).
The array.array
另一方面,type 只是 C 数组的一个薄包装。它只能保存同类数据(也就是说,所有相同类型的数据),因此它只使用sizeof(one object) * length
字节内存。大多数情况下,当您需要将 C 数组公开给扩展或系统调用时(例如,ioctl
or fctnl
).
array.array
也是一种合理的表示方式mutablePython 2.x 中的字符串 (array('B', bytes)
)。然而,Python 2.6+ 和 3.x 提供了可变的byte字符串为bytearray https://docs.python.org/3/library/stdtypes.html#bytearray.
但是,如果你想做math在同构数值数据数组上,那么您最好使用 NumPy,它可以自动矢量化复杂多维数组上的操作。
使长话短说: array.array
当您出于某种原因需要同构 C 数据数组时很有用除了做数学之外.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)