Python OverflowerError:range()结果有太多项,尽管它没有';T
我有一个循环:Python OverflowerError:range()结果有太多项,尽管它没有';T,python,python-2.7,Python,Python 2.7,我有一个循环: for i in range(1000000000, 1000000030): foo(i) 当我执行它时,会出现以下错误: Traceback (most recent call last): File "/CENSORED/Activity.py", line 11, in <module> for i in range(1000000000, 10000000030): OverflowError: range() result has t
for i in range(1000000000, 1000000030):
foo(i)
当我执行它时,会出现以下错误:
Traceback (most recent call last):
File "/CENSORED/Activity.py", line 11, in <module>
for i in range(1000000000, 10000000030):
OverflowError: range() result has too many items.
编辑2:
def factorizeInefficient(n):
teiler = list()
for i in range(n):
if i != 0:
if (n%i)==0:
teiler.append(i)
print teiler
我自己刚刚找到了解决方案:这里也有一个range(n)对象,这会导致内存错误
另外一个问题:你们怎么知道这是python 2?(顺便说一句,你是对的…再数一次你的零;)我认为这太多了。复制/粘贴
范围()
部分代码:
>>> len(range(1000000000, 10000000030))
9000000030
所以这个范围内实际上有大约90亿个元素。第一个参数可能缺少零,或者第二个参数的零太多;-) 看一看,您可能会发现它很有用。如果您使用的是python 2.7,那么您应该使用xrange而不是range。因为您使用的是python 2,并且
range
将创建一个列表
对象。仅对于底层数组中的指针,此列表对象将需要类似9000000030*8*1e-9==72
GB的内容。对于列表中包含的每个实际int
对象,您可以再添加至少28个字节,使您达到297
gigabytes。Python 3中的第二个数字range()
与Python 2中的xrange()
类似:它在Python 3中返回一个迭代器,而不是列表。所以Python3不关心它有多少元素。Python 2必须构造一个包含那么多元素的列表,而且在一台内存足以容纳90亿整数的机器上运行是极不可能的;-)请注意,如果您在算术中编写大量数字,则更容易避免这些错误,即:range(1000*1000*1000,1000*1000*1000+30)
这样可以节省跟踪时间,您的计算机甚至不会注意到额外的工作。
>>> len(range(1000000000, 10000000030))
9000000030