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

Python 如何在列表中存储大量值?,python,python-3.x,Python,Python 3.x,前几天在Codechef竞赛中,我使用range函数创建了一个列表。 my_list=list(范围(n)) 其中n与10**18一样大。 它在Codechef上给出了NZEC错误。因此,为了了解可能出现的问题,我尝试创建一个包含10**18元素的列表,使用 my_list=list(范围(10**18)) 但是它给了内存错误 那么,我如何处理这种情况呢?您可以尝试使用迭代器: rn = range(0,10**18) it = iter(rn) # could be created from

前几天在Codechef竞赛中,我使用range函数创建了一个列表。
my_list=list(范围(n))
其中
n
10**18
一样大。 它在Codechef上给出了NZEC错误。因此,为了了解可能出现的问题,我尝试创建一个包含
10**18
元素的列表,使用
my_list=list(范围(10**18))
但是它给了内存错误


那么,我如何处理这种情况呢?

您可以尝试使用迭代器:

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=范围(0,10**18)
例如,可以从其他来源创建iter(rn)
ls=列表(范围(0,15))
打印(rn)
打印(ls)
打印(it)
>范围(0,10000000000000000)
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
> 
#我会放一些休息,所以当你尝试它的时候,它总有一天会停止的哈哈
对我来说:

如果(iA
MemoryError
表示您的计算机内存不足。考虑到您试图创建的列表有多大,这并不奇怪

如果一个整数只需要4个字节(就像在C中一样,Python整数要大得多,大小也不尽相同)
10**18
整数需要大约一百万TB的RAM


为什么您希望能够创建如此巨大的列表?如果您认为需要这样一个对象来解决编程问题,那么内存不足的事实可能表明需要找到一种更聪明的算法,它几乎不需要那么多空间。

实际上不需要显式的调用
iter
range
对象本身是可直接编辑的。@Blckknght完全正确,你知道,我在你评论的那一刻编辑了答案,非常感谢你的观察!!!@Blckknght有…试试
下一步(range(5))
。它会说它不是直接可编辑的。编辑:另外,如果你的意思是在
for
循环中,像这样:
for T in L
,它调用
iter(L)
在它开始循环之前。@Geetrance:是的,这就是iterable和迭代器之间的区别。
next
期望和迭代器,但是
for
循环接受任何iterable(包括迭代器,它们的
\iter\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法总是返回
self
).啊,iterable和iterator之间的区别:((((我想你是说它是一个迭代器,正如你所说它是可编辑的,但是像……嗯?你需要对这个列表做什么?显然你不能一次把它全部存储在内存中。这就是生成器的用途。@PaulRooney你能给我推荐一些源来了解生成器的更多信息吗?只是为了搜索它并阅读各种博客帖子(博客帖子可能是一维的、固执己见的等等,所以不要依赖一个或几个)也许一本书是最好的方式,但显然它不是免费的。这种数字不可能适用于任何情况?@Damianaltenero一百万TB的RAM?老实说,我想不出有什么应用程序会有用(至少,不是针对StackOverflow上的平均开发人员发布)@Damianalattenero-也许在20年后,我们将拥有能够处理1EB数据的计算机。我不相信,即使是最近用来成像黑洞的精密的测量方法,也只有5PB的数据。这和现在计算的数据差不多大。@Omnifarious感谢有时间回答,我得到了答案现在指出