为了账号安全,请及时绑定邮箱和手机立即绑定

Python List vs. Array - 何时使用?

Python List vs. Array - 何时使用?

德玛西亚99 2019-07-29 10:12:22
Python List vs. Array - 何时使用?如果要创建1d数组,可以将其实现为List,或者使用标准库中的“array”模块。我一直使用列表进行1d数组。我想要使用阵列模块的原因或情况是什么?它是用于性能和内存优化,还是我错过了一些明显的东西?
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

基本上,Python列表非常灵活,可以保存完全异构的任意数据,并且可以在摊销的常量时间内非常有效地附加。如果你需要有效地缩短和增加你的列表并且没有麻烦,那么它们就是你要走的路。但是他们比C阵列使用更多的空间

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数组时,除了做数学之外的其他原因,这个数据非常有用。


查看完整回答
反对 回复 2019-07-29
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

对于几乎所有情况,正常列表是正确的选择。数组模块更像是C数组上的一个瘦包装器,它为您提供了一种强类型容器(请参阅文档),可以访问更多类似C的类型,例如signed / unsigned short或double,它们不是构建的一部分-in类型。我只说如果你确实需要它就使用数组模块,在所有其他情况下都坚持使用列表。


查看完整回答
反对 回复 2019-07-29
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

如果您不知道为什么要使用它,那么阵列模块就是您可能不需要的那种东西之一(请注意我并不是想以一种居高临下的方式说出来!) 。大多数情况下,阵列模块用于与C代码接口。为了更直接地回答有关性能的问题:

对于某些用途,数组比列表更有效。如果你需要分配一个你知道不会改变的数组,那么数组可以更快并且使用更少的内存。GvR有一个优化轶事,其中数组模块成为赢家(长读,但值得)。

另一方面,列表占用更多内存而不是数组的部分原因是因为python将在使用所有已分配元素时分配一些额外元素。这意味着将项目附加到列表更快。因此,如果您计划添加项目,则可以使用列表。

TL; DR我只使用一个数组,如果你有一个特殊的优化需求,或者你需要与C代码接口(并且不能使用pyrex)。


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 698 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信