在 Python 中,列表可以有多大?我需要一个大约 12000 个元素的列表。我还能运行排序等列表方法吗?
10 回答
正如Python 文档所说:
系统最大尺寸
平台的 Py_ssize_t 类型支持的最大正整数,因此列表、字符串、字典和许多其他容器可以拥有的最大大小。
在我的电脑(Linux x86_64)中:
>>> import sys
>>> print sys.maxsize
9223372036854775807
当然可以。实际上你可以很容易地看到:
l = range(12000)
l = sorted(l, reverse=True)
在我的机器上运行这些行需要:
real 0m0.036s
user 0m0.024s
sys 0m0.004s
但肯定正如其他人所说。数组越大,操作就越慢。
在随意的代码中,我创建了包含数百万个元素的列表。我相信 Python 的列表实现只受系统内存量的限制。
此外,尽管列表的大小,列表方法/函数应该继续工作。
如果您关心性能,那么研究NumPy之类的库可能是值得的。
12000 个元素在 Python 中不算什么……实际上,只要 Python 解释器在您的系统上有内存,元素的数量就可以达到。
列表的性能特征在 Effbot 上进行了描述。
Python 列表实际上是作为用于快速随机访问的向量实现的,因此容器基本上可以容纳与内存空间一样多的项目。(列表中包含的指针需要空间,指向的对象需要内存空间。)
追加是O(1)
(摊销的常数复杂度),但是,插入/删除序列中间将需要O(n)
(线性复杂度)重新排序,这将随着列表中元素的数量而变慢。
您的排序问题更加细致入微,因为比较操作可能需要无限时间。如果您执行非常慢的比较,则需要很长时间,尽管这不是Python 的 list 数据类型的错。
反转只需要交换列表中所有指针所需的时间(必然O(n)
(线性复杂性),因为您触摸每个指针一次)。
它因不同的系统而异(取决于 RAM)。最简单的找出方法是
import six
six.MAXSIZE
9223372036854775807
This gives the max size of list
and dict
too ,as per the documentation
我会说你只受到可用 RAM 总量的限制。显然,数组越大,对它的操作就越长。
列表数量没有限制。导致您的错误的主要原因是 RAM。请升级您的内存大小。