我有一个相当简单的脚本,它生成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,而不是rangexrange根据需要生成数字。 (在Python 3上,range会执行xrange过去的操作,而xrange消失了。)

哦,如果您认为11 GB足够用于该列表:则不是Python。尝试sys.getsizeof(0)查看int占用了多少字节。

关于python - 脚本返回“已杀死”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34139819/

10-08 22:29
查看更多