保持生成器连续运行的最Python方法是什么?

时间:2019-01-03 00:55:19

标签: python

如果您的生成器或输入集不是唯一的,而我不能只是查询或存储在内存中,如何最好地保持运行状态?

如果内存不是问题,则可以像在此Question/Answer中那样使用count或Counter来创建列表。

但是,我认为如果没有足够的存储空间或不了解这些项目,我认为决定是最有意义的。键是输入的值,值是计数。还有更好的方法吗?

一个例子可能是数字的非均等加权随机生成。就像一个无限边的骰子,其中一些数字比其他数字多得多,但我们不知道这些数字是多少。

1 个答案:

答案 0 :(得分:1)

collections.Counter可以在可迭代对象上工作,它可以使迭代器仅返回(并保留在内存中)所需的下一项。

示例

from collections import Counter
from itertools import islice

import random


def producer():
    while True:
        yield int(random.normalvariate(300, 100))


data = Counter(islice(producer(), 400))

print(data)

400可以替换为更大的值,它只是将每个出现的值与出现次数(例如您所描述的字典)存储一次所需的内存。