如果你正在创建一个1d数组,你可以将它实现为一个列表,或者使用标准库中的'array'模块。我一直用链表来表示一维数组。
我想要使用数组模块的原因或情况是什么?
它是为了性能和内存优化,还是我遗漏了一些明显的东西?
如果你正在创建一个1d数组,你可以将它实现为一个列表,或者使用标准库中的'array'模块。我一直用链表来表示一维数组。
我想要使用数组模块的原因或情况是什么?
它是为了性能和内存优化,还是我遗漏了一些明显的东西?
当前回答
数组模块是一种如果你不知道为什么要使用它,你可能不需要的东西(请注意,我并不是试图以一种居高居高下的方式说!)。大多数情况下,数组模块用于与C代码进行交互。为了更直接地回答你关于性能的问题:
在某些用途上,数组比列表更有效。如果你需要分配一个你知道不会改变的数组,那么数组可以更快,使用更少的内存。GvR有一个优化的轶事,其中数组模块是赢家(长读,但值得一读)。
另一方面,列表比数组占用更多内存的部分原因是,当所有分配的元素都被使用时,python会分配一些额外的元素。这意味着向列表中添加项更快。所以,如果你打算添加项目,列表是最好的方法。
我只会在有特殊的优化需求或者需要与C代码交互(不能使用pyrex)时使用数组。
其他回答
Array只能用于特定类型,而list可以用于任何对象。
数组也只能有一种类型的数据,而列表可以有各种对象类型的条目。
数组对于某些数值计算也更有效。
这是一种交易!
各有优点:
list
灵活的 可以是异质的
数组(例如:numpy数组)
统一值数组 均匀 紧凑(尺寸) 高效(功能和速度) 方便
如果要使用数组,请考虑numpy或scipy包,它们为数组提供了更大的灵活性。
数组模块是一种如果你不知道为什么要使用它,你可能不需要的东西(请注意,我并不是试图以一种居高居高下的方式说!)。大多数情况下,数组模块用于与C代码进行交互。为了更直接地回答你关于性能的问题:
在某些用途上,数组比列表更有效。如果你需要分配一个你知道不会改变的数组,那么数组可以更快,使用更少的内存。GvR有一个优化的轶事,其中数组模块是赢家(长读,但值得一读)。
另一方面,列表比数组占用更多内存的部分原因是,当所有分配的元素都被使用时,python会分配一些额外的元素。这意味着向列表中添加项更快。所以,如果你打算添加项目,列表是最好的方法。
我只会在有特殊的优化需求或者需要与C代码交互(不能使用pyrex)时使用数组。
对于几乎所有情况,普通列表都是正确的选择。arrays模块更像是C数组上的一个薄包装器,它为您提供了一种强类型容器(参见文档),可以访问更多类似C的类型,如有符号/无符号short或double,这些都不是内置类型的一部分。我会说,只有在你真的需要它的时候才使用数组模块,在所有其他情况下,坚持使用列表。