140

在 Python 中,列表可以有多大?我需要一个大约 12000 个元素的列表。我还能运行排序等列表方法吗?

4

10 回答 10

224

根据源代码,列表的最大大小为PY_SSIZE_T_MAX/sizeof(PyObject*).

PY_SSIZE_T_MAXpyport.h中定义为((size_t) -1)>>1

在常规的 32 位系统上,这是 (4294967295 / 2) / 4 或 536870912。

因此,32 位系统上 python 列表的最大大小为536,870,912 个元素。

只要您拥有的元素数量等于或低于此数量,所有列表函数都应该正确运行。

于 2009-05-12T23:48:21.557 回答
93

正如Python 文档所说

系统最大尺寸

平台的 Py_ssize_t 类型支持的最大正整数,因此列表、字符串、字典和许多其他容器可以拥有的最大大小。

在我的电脑(Linux x86_64)中:

>>> import sys
>>> print sys.maxsize
9223372036854775807
于 2013-04-01T07:45:18.747 回答
28

当然可以。实际上你可以很容易地看到:

l = range(12000)
l = sorted(l, reverse=True)

在我的机器上运行这些行需要:

real    0m0.036s
user    0m0.024s
sys  0m0.004s

但肯定正如其他人所说。数组越大,操作就越慢。

于 2009-05-12T22:33:28.807 回答
7

在随意的代码中,我创建了包含数百万个元素的列表。我相信 Python 的列表实现只受系统内存量的限制。

此外,尽管列表的大小,列表方法/函数应该继续工作。

如果您关心性能,那么研究NumPy之类的库可能是值得的。

于 2009-05-12T22:36:12.470 回答
5

12000 个元素在 Python 中不算什么……实际上,只要 Python 解释器在您的系统上有内存,元素的数量就可以达到。

于 2009-05-12T22:29:11.623 回答
5

列表的性能特征在 Effbot 上进行了描述。

Python 列表实际上是作为用于快速随机访问的向量实现的,因此容器基本上可以容纳与内存空间一样多的项目。(列表中包含的指针需要空间,指向的对象需要内存空间。)

追加是O(1)(摊销的常数复杂度),但是,插入/删除序列中间将需要O(n)(线性复杂度)重新排序,这将随着列表中元素的数量而变慢。

您的排序问题更加细致入微,因为比较操作可能需要无限时间。如果您执行非常慢的比较,则需要很长时间,尽管这不是Python 的 list 数据类型的错。

反转只需要交换列表中所有指针所需的时间(必然O(n)(线性复杂性),因为您触摸每个指针一次)。

于 2009-05-12T23:53:34.090 回答
5

它因不同的系统而异(取决于 RAM)。最简单的找出方法是

import six six.MAXSIZE 9223372036854775807 This gives the max size of list and dict too ,as per the documentation

于 2018-12-28T06:06:33.293 回答
1

我会说你只受到可用 RAM 总量的限制。显然,数组越大,对它的操作就越长。

于 2009-05-12T22:30:24.630 回答
0

我在 x64 位系统上从这里得到这个:Python 3.7.0b5 (v3.7.0b5:abb8802389, May 31 2018, 01:54:01) [MSC v.1913 64 bit (AMD64)] on win32

enter image description here

于 2018-06-08T02:32:23.557 回答
-18

列表数量没有限制。导致您的错误的主要原因是 RAM。请升级您的内存大小。

于 2014-03-07T02:44:06.807 回答