python中的MemoryError(List)

时间:2014-08-24 19:09:05

标签: python list

我想使用数组或列表,但使用987654321项。

问题是我收到错误Memoryerror

我的代码如下:

list = [0]*987654321
for i in range(1, list, 1):
        tableau.append(1)

我该如何解决,谢谢

修改

我想要使用这个巨大的列表的目的是我想生成小于987654321的所有素数,并且我正在尝试使用 eratosthenes的筛子

2 个答案:

答案 0 :(得分:2)

首先,987654321是一个巨大的号码,它需要大约8GB的可用内存来表示填充0 s的长度列表。您的系统(看起来是32位和/或具有少量RAM)内存不足,其中包含该大小的周期列表;根据{{​​3}},32位CPython实现中列表的理论最大大小为536870912个元素,或者通常为:sys.maxsize

在当前系统中,程序永远不会越过第一行,您应该重新考虑您的方法,使用文件或外部数据库可能是一个更好的主意。还要考虑在更好的机器上运行程序。

其次,你不应该使用list作为变量名,这是一个内置函数,你不应该暗示它。第三,迭代循环看起来不对(请参阅this post的文档以了解预期的参数),它应该是:

tableau = []
for i in xrange(987654321): # assuming Python 2.x
    tableau.append(1)

请注意,无需在0中初始化列表,您只需将元素附加到其中即可。或者甚至更简单,如果所有元素都是1,这也会起作用(当然,假设系统因为巨大的尺寸而没有崩溃):

tableau = [1] * 987654321

答案 1 :(得分:0)

那是因为列表中有太多(987654321)个元素,而你的内存还不够。代码实际上在第一行引发了异常。只需从空列表开始,然后将项目添加到其中。如果你真的必须在列表中包含那么多项目(在大多数情况下不需要),你应该想出一个更好的方法来存储那么多信息。我能想到的最简单的解决方案是将文件中的元素直接写入内存。