我有这个相当简单的脚本,它生成1000000000(9个零)数字,然后在生成的数字中存储生成它们的次数。
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
消息。根据这个问题What does 'killed' mean?,使用dic.iteritems()
应该足以防止此类问题,但事实并非如此。
那我怎么能继续完成这样的任务呢?
答案 0 :(得分:5)
看起来你的问题不是dict。你的问题在这里:
for i in range(0, 1000000000):
^^^^^^^^^^^^^^^^^^^^
在Python 2上,这是一个列表1000000000个项目的长度,超过了您的系统可以处理的项目。您想要xrange
,而不是range
。 xrange
按需生成数字。 (在Python 3上,range
执行xrange
过去和xrange
已消失的内容。)
哦,如果你认为11 GB应该足够用于该列表:不是在Python中。尝试sys.getsizeof(0)
查看int占用的字节数。