Python 脚本返回";“杀死”;
我有一个相当简单的脚本,它生成100000000(九个零)个数字,然后将生成的数字存储在一个文件中,并记录它们生成的次数Python 脚本返回";“杀死”;,python,Python,我有一个相当简单的脚本,它生成100000000(九个零)个数字,然后将生成的数字存储在一个文件中,并记录它们生成的次数 import random import csv dic = {} for i in range(0, 1000000000): n = random.randint(0, 99999) if n in dic: dic[n] += 1 else: dic[n] = 1 writer = csv.writer(ope
import random
import csv
dic = {}
for i in range(0, 1000000000):
n = random.randint(0, 99999)
if n in dic:
dic[n] += 1
else:
dic[n] = 1
writer = csv.writer(open('output', 'w'))
for key, value in dic.iteritems():
writer.writerow([key, value])
writer.close()
脚本正在退出,并显示一条Killed
消息。根据这个问题,使用dic.iteritems()应该足以防止此类问题,但事实并非如此
那么,我如何才能继续完成这样的任务呢?看起来你的问题并不在于此。你的问题在于:
for i in range(0, 1000000000):
^^^^^^^^^^^^^^^^^^^^
在Python2上,这是一个100000000个项目的列表,超出了系统的处理能力。您想要的是xrange
,而不是range
<代码>xrange根据需要生成数字。(在Python3上,range
做xrange
以前做过的事情,xrange
已经不存在了。)
哦,如果您认为11GB应该足以满足这个列表:在Python中不是这样。请尝试
sys.getsizeof(0)
查看int需要多少字节。看起来您的问题不是dict。您的问题是:
for i in range(0, 1000000000):
^^^^^^^^^^^^^^^^^^^^
在Python2上,这是一个100000000个项目的列表,超出了系统的处理能力。您想要的是xrange
,而不是range
<代码>xrange根据需要生成数字。(在Python3上,range
做xrange
以前做过的事情,xrange
已经不存在了。)
哦,如果您认为11GB应该足以满足这个列表:在Python中不是这样。请尝试
sys.getsizeof(0)
查看int需要多少字节。如果是数组,则该字典需要大约3GB的内存。你有那么多内存吗?@RishavKundu-“如果是数组”。。。但这是一个错误dictionary@cricket_007字典比数组占用更多的空间。我有12GB的RAM,实际上是11GB的免费使用xrange
而不是range
。如果是数组,字典需要大约3GB的内存。你有那么多内存吗?@RishavKundu-“如果是数组”。。。但这是一个错误dictionary@cricket_007字典比数组占用更多的空间。我有12GB的RAM,实际上是11GB的免费使用xrange
而不是range
,不过,假设一个数字有8个字节,大约是7gb,这并不能解释死亡状态。@RishavKundu:实际上我只是想在答案中添加一些关于这一点的内容。根据您的编辑,范围大约为22GB。。xD使用xrange
现在,它仍然没有完成,但是它没有崩溃,直到假设一个数字有8个字节,大约是7gb,这并不能解释被杀死的状态。@RishavKundu:实际上我正要在答案中添加一些关于这个的内容。根据您的编辑,这个范围
大约是22GB。。xD使用xrange
现在,它仍然没有完成,但也没有崩溃