如何在列表中存储大量值?

2024-04-27 00:34:15 发布

您现在位置:Python中文网/ 问答频道 /正文

前几天在Codechef比赛中,我用range函数创建了一个列表。 my_list = list(range(n)) 其中n10**18一样大。 它在Codechef上给出了NZEC错误。因此,为了知道问题出在哪里,我尝试创建一个包含10**18元素的列表,使用 my_list = list(range(10**18)) 但它给了记忆错误。你知道吗

那么,我该如何应对这种情况呢?你知道吗


Tags: 记忆函数元素列表my错误情况range
2条回答

MemoryError表示计算机内存不足。考虑到你试图创建的列表有多大,这并不奇怪。你知道吗

如果一个整数只占用4个字节(就像在C中一样,Python整数要大得多,而且大小也不尽相同)10**18整数将占用大约一百万TB的RAM。你知道吗

为什么你期望能够创造一个如此巨大的清单?如果你认为你需要这样一个对象来解决一个编程问题,那么内存耗尽的事实可能表明有一个更聪明的算法可以找到,它不需要太多的空间。你知道吗

您可以尝试使用迭代器:

rn = range(0,10**18)
it = iter(rn) # could be created from other source, used as example
ls = list(range(0,15))

print(rn)
print(ls)
print(it)

> range(0, 1000000000000000000)
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
> <range_iterator object at 0x7f20cd3866f0>

#I will put some breaks so when you try it, it will stop some day haha

for i in it:
  if(i<20):
    print(i)
  else:
    break

for i in rn:
  if(i<20):
    print(i)
  else:
    break

如果您查看输出,rn和it是对象,它们没有在内存中存储所有值,只是生成它们所需的信息。另一方面,一个列表在内存中有所有的值。你知道吗

相关问题 更多 >