在Python中,列表有多大?我需要一个大约12000个元素的列表。我还能运行排序等列表方法吗?
根据source code,列表的最大大小是PY_SSIZE_T_MAX/sizeof(PyObject*)
。
PY_SSIZE_T_MAX
在pyport.h中被定义为((size_t) -1)>>1
在常规的32位系统上,这是(4294967295/2)/ 4或536870912。
因此,32位系统上的python列表的最大大小为536,870,912个元素。
只要您拥有的元素数量等于或低于此数量,所有列表函数都应该正常运行。
列表编号没有限制。导致错误的主要原因是RAM。请升级你的内存大小。
了sys.maxsize
平台的Py_ssize_t类型支持的最大正整数,因此最大大小的列表,字符串,dicts和许多其他容器都可以。
在我的电脑(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这样的库可能是值得的。
Python中有12000个元素......实际上,只要Python解释器在您的系统上有内存,元素的数量就可以了。
Performance characteristics for lists在Effbot上有描述。
Python列表实际上是作为快速随机访问的向量实现的,因此容器基本上可以容纳与内存中的空间一样多的项目。 (您需要列表中包含的指针空间以及指向的对象的内存空间。)
附加是O(1)
(摊销常数复杂度),但是,从序列中间插入/删除将需要O(n)
(线性复杂度)重新排序,这将变得比列表中的元素数量慢。
您的排序问题更加细致,因为比较操作可能需要无限的时间。如果你进行的比较非常缓慢,那将需要很长时间,尽管这不是Python's list data type的错。
逆转只需要交换列表中所有指针所需的时间(必然是O(n)
(线性复杂度),因为你触摸每个指针一次)。
它因不同的系统而异(取决于RAM)。最简单的方法是找出答案
import six
six.MAXSIZE
9223372036854775807
根据list
,这也给出了dict
和documentation的最大尺寸
我说你只受限于可用的RAM总量。显然,阵列越大,对它的操作就越长。