在Codechef竞赛的第二天,我使用范围函数创建了一个列表。
my_list = list(range(n))
其中n
和10**18
一样大。
它使Codechef出现NZEC错误。因此,为了知道可能是什么问题,我尝试使用创建带有10**18
元素的列表
my_list = list(range(10**18))
但它给了内存错误。
那么,我该如何应对这种情况?
答案 0 :(得分:3)
MemoryError
表示您的计算机内存不足。考虑到您要创建的列表有多大,这并不奇怪。
如果一个整数仅占用4个字节(就像在C中一样,Python整数要大得多且大小可变)10**18
整数将需要大约一百万兆字节的RAM。
您为什么期望能够创建如此庞大的清单?如果您认为需要这样的对象来解决编程问题,则内存不足的事实可能表明可以找到一种更聪明的算法,不需要几乎足够的空间。
答案 1 :(得分:1)
您可以尝试使用迭代器:
<div class="wrapper">text</div>
如果查看输出,则rn和it是不将所有值存储在内存中的对象,仅是产生它们所需的信息。另一方面,列表将所有值存储在内存中。