在 Python 中,列表能有多大?我需要一个大约12000个元素的列表。我是否仍然可以运行诸如排序等列表方法?
12000个元素在 Python 中不算什么... ... 实际上,只要 Python 解释器在系统中有内存,元素的数量就可以达到这个程度。
我会说,您只受到可用内存总量的限制。显然,数组越大,操作时间越长。
当然可以。实际上你可以很容易地看到:
l = range(12000) l = sorted(l, reverse=True)
在我的机器上运行这些线路需要:
real 0m0.036s user 0m0.024s sys 0m0.004s
但正如其他人所说的那样,数组越大,运算速度就越慢。
在随意代码中,我创建了包含数百万个元素的列表。我相信 Python 的列表实现只受系统内存量的限制。
此外,列表方法/函数应该继续工作,尽管列表的大小。
如果您关心性能,那么研究一下诸如 笨蛋之类的库可能是值得的。
根据 源代码,列表的最大大小是 PY_SSIZE_T_MAX/sizeof(PyObject*)。
PY_SSIZE_T_MAX/sizeof(PyObject*)
PY_SSIZE_T_MAX在 皮波特中定义为 ((size_t) -1)>>1
PY_SSIZE_T_MAX
((size_t) -1)>>1
在常规的32位系统上,这是(4294967295/2)/4或536870912。
因此,32位系统上的 python 列表的最大大小是 536,870,912元素。
只要您拥有的元素数量等于或低于此值,所有列表函数都应该能够正确操作。
在 Effbot 上描述了列表 的性能特征。
Python 列表实际上是作为快速随机访问的向量实现的,因此容器基本上只要内存中有足够的空间就可以容纳尽可能多的项。(列表中包含的指针需要空间,被指向的对象也需要内存中的空间。)
附加是 O(1)(分摊常数复杂度) ,然而,从序列中间插入/删除将需要一个 O(n)(线性复杂度)重新排序,随着列表中元素数量的减少,这将变得更慢。
O(1)
O(n)
您的排序问题更加微妙,因为比较操作可能需要无限长的时间。如果执行的比较非常缓慢,那么将花费很长时间,尽管这不是 Python 的列表数据类型的错误。
反转只需要交换列表中所有指针所需的时间(必须是 O(n)(线性复杂度) ,因为您只触摸每个指针一次)。
作为 Python 文档说:
Sys.maxsize
平台的 Py _ ssize _ t 类型支持的最大正整数,因此最大大小列表、字符串、字母表和许多其他容器可以具有。
在我的电脑里(Linux x86 _ 64) :
>>> import sys >>> print sys.maxsize 9223372036854775807
没有列表号的限制。 导致错误的主要原因是 RAM。 请升级内存大小。
我在 x64位系统上找到了这个: Python 3.7.0 b5(v3.7.0 b5: abb8802389,May 312018,01:54:01)[ MSC v. 191364 bit (AMD64)] on win32
它因不同的系统而异(取决于 RAM)
进口6号 6号,最大号 9223372036854775807 根据 < a href = “ https://pythonhosted.org/six/# six. MAXSIZE”rel = “ noReferrer”> 文档,这也给出了 list和 dict的最大大小
进口6号 6号,最大号 9223372036854775807
list
dict