我想使用数组或列表,但使用987654321项。
问题是我收到错误Memoryerror
我的代码如下:
list = [0]*987654321
for i in range(1, list, 1):
tableau.append(1)
我该如何解决,谢谢
修改
我想要使用这个巨大的列表的目的是我想生成小于987654321的所有素数,并且我正在尝试使用 eratosthenes的筛子
答案 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)个元素,而你的内存还不够。代码实际上在第一行引发了异常。只需从空列表开始,然后将项目添加到其中。如果你真的必须在列表中包含那么多项目(在大多数情况下不需要),你应该想出一个更好的方法来存储那么多信息。我能想到的最简单的解决方案是将文件中的元素直接写入内存。