|
|
1
471
基本上,Python列表非常灵活,可以容纳完全异构的任意数据,并且可以非常高效地添加到
amortized constant time
. 如果你需要在没有麻烦的情况下高效地缩减和增加你的列表时间,那么它们就是最好的选择。但是他们使用
比C数组大得多的空间
,部分原因是列表中的每个项都需要构造一个单独的Python对象,即使对于可以用简单C类型表示的数据(例如。
这个
在数值数据的同质数组上,最好使用NumPy,它可以自动将复杂多维数组上的操作矢量化。
长话短说
|
|
|
2
68
docs ),可以访问更多类似C的类型,如有符号/无符号short或double,这些类型不是内置类型的一部分。我想说,只有在您真正需要的时候才使用arrays模块,在所有其他情况下,请坚持使用列表。 |
|
|
3
55
如果您不知道为什么要使用阵列模块,那么阵列模块可能是您不需要的东西之一(请注意,我并不是以一种居高临下的方式这么说!)。大多数情况下,数组模块用于与C代码接口。要更直接地回答有关性能的问题,请执行以下操作: 对于某些用途,数组比列表更有效。如果您需要分配一个您知道不会更改的阵列,那么阵列可以更快并且使用更少的内存。GvR有一个 optimization anecdote 另一方面,列表比数组占用更多内存的部分原因是,当所有分配的元素都被使用时,python会分配一些额外的元素。这意味着将项目附加到列表会更快。因此,如果您计划添加项目,则应列出一份清单。 TL;DR I只会在您有特殊优化需求或需要与C代码接口(并且不能使用 pyrex ). |
|
|
4
21
每种方法的优点: 列表数组(例如:numpy数组)
|
|
|
5
13
|
|
|
6
8
标准库数组对于二进制I/O非常有用,例如将INT列表转换为字符串以写入(例如)wave文件。正如许多人已经注意到的那样,如果你要做任何真正的工作,那么你应该考虑使用NUMPY。 |
|
|
7
6
|
|
|
8
5
数组也只能包含一种类型的数据,而列表可以包含各种对象类型的条目。
|
|
|
9
5
在性能方面,以下是一些比较python列表、数组和numpy数组的数字(所有这些都在2017年Macbook Pro上使用python 3.7)。 最终的结果是python列表对于这些操作来说是最快的。
|
|
|
10
4
|
|
|
11
0
numpy数组和list之间的一个重要区别是数组切片是原始数组上的视图。这意味着不会复制数据,对视图的任何修改都将反映在源阵列中。 |