Python 列表与数组——何时使用?

新手上路,请多包涵

如果要创建一维数组,则可以将其实现为列表,或者使用标准库中的“数组”模块。我一直将列表用于一维数组。

我想改用数组模块的原因或情况是什么?

是为了性能和内存优化,还是我遗漏了一些明显的东西?

原文由 Corey Goldberg 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 725
2 个回答

基本上,Python 列表非常灵活,可以保存完全异构的任意数据,并且可以在 摊销的常数时间内 非常有效地附加它们。如果您需要高效且轻松地缩小和增加列表,那么它们就是您的最佳选择。但它们使用 的空间比 C 数组多得多,部分原因是列表中的每个项目都需要构造一个单独的 Python 对象,即使对于可以用简单 C 类型表示的数据(例如 floatuint64_t )。

另一方面, array.array 类型只是 C 数组的一个薄包装器。它只能保存同质数据(即所有相同类型的数据),因此它仅使用 sizeof(one object) * length 字节的内存。大多数情况下,您应该在需要将 C 数组公开给扩展或系统调用时使用它(例如, ioctlfctnl )。

array.array 也是在 Python 2.x ( array('B', bytes) ) 中表示 可变 字符串的合理方式。但是,Python 2.6+ 和 3.x 提供了一个可变 字节 字符串 bytearray

但是,如果您想对同质的数值数据数组进行 数学运算,那么最好使用 NumPy,它可以自动对复杂的多维数组进行矢量化操作。

长话短说array.array 当您出于 数学以外 的原因需要同构 C 数据数组时很有用。

原文由 Dan Lenski 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于几乎所有情况,正常列表都是正确的选择。 arrays 模块更像是 C 数组的一个薄包装器,它为您提供了一种强类型容器(请参阅 文档),可以访问更多类 C 类型,例如有符号/无符号短整型或双精度型,它们不是构建的一部分- 输入类型。我会说只有当你真的需要它时才使用数组模块,在所有其他情况下坚持使用列表。

原文由 André 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏