如果您的生成器或输入集不是唯一的,而我不能只是查询或存储在内存中,如何最好地保持运行状态?
如果内存不是问题,则可以像在此Question/Answer中那样使用count或Counter来创建列表。
但是,我认为如果没有足够的存储空间或不了解这些项目,我认为决定是最有意义的。键是输入的值,值是计数。还有更好的方法吗?
一个例子可能是数字的非均等加权随机生成。就像一个无限边的骰子,其中一些数字比其他数字多得多,但我们不知道这些数字是多少。
答案 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
可以替换为更大的值,它只是将每个出现的值与出现次数(例如您所描述的字典)存储一次所需的内存。