我有这个相当简单的脚本,它生成 1000000000(九个零)个数字,然后将生成的数字及其生成次数存储在一个文件中。
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() 应该足以防止此类问题,但事实并非如此。
那么我该如何继续完成这样的任务呢?
请您参考如下方法:
看起来你的问题不是字典。你的问题在这里:
for i in range(0, 1000000000):
^^^^^^^^^^^^^^^^^^^^
在 Python 2 上,这是一个 1000000000 项长的列表,超出了系统的处理能力。您需要 xrange,而不是 range。 xrange 按需生成数字。 (在 Python 3 上,range 执行 xrange 过去的工作,而 xrange 已不复存在。)
哦,如果您认为 11 GB 应该足够用于该列表:不是在 Python 中。尝试 sys.getsizeof(0) 查看 int 需要多少字节。
